개발 지식/CS 지식

👩‍💻 멀티 프로섞슀 vs 멀티 슀레드 비교 💯 완전 쎝정늬

읞파_ 2023. 4. 5. 12:18

multi-thread-process

멀티 프로섞슀와 멀티 슀레드는 í•œ 얎플늬쌀읎션에 대한 처늬방식 ìŽëŒê³  볎멎 된닀. 닚순히 프로귞랚을 여러개 띄워놓는 것읎 멀티 프로섞슀가 아니띌 읎 둘은 ì–žì œ 얎느때에 ì–Žë–€ 방식윌로 처늬하느냐에 따띌 닀륞 것윌로 읎핎핎알 한닀.

읎늄윌로 유추할 수 있듯읎 멀티 프로섞슀와 멀티 슀레드는 여러개의 프로섞슀, 슀레드가 동작하는 것을 음 컫는닀. 닚음읎 아닌 닀쀑윌로 돌아감윌로썚 성능 향상 등 여러가지 횚곌륌 얻을 수 있닀. 하지만 또한 읎로 읞핎 발생되는 부가적읞 묞제점도 발생하게 된닀. 지ꞈ 부터 읎에 대핮 자섞히 알아볎자

multi-thread-process

 

👩‍💻 ‍완전히 정복하는 프로섞슀 vs 슀레드 개념

한눈에 읎핎하는 프로섞슀 & 슀레드 개념 전공 지식 없읎 컎퓚터의 프로귞랚을 읎용하는데는 묞제 없얎 왔지만 소프튞웚얎륌 개발하는 사람윌로서 컎퓚터 싀행 낎부 요소륌 따젞볎게 될때, 아

inpa.tistory.com

 

Multi Process

멀티 프로섞슀는 욎영첎제에서 하나의 응용 프로귞랚에 대핮 동시에 여러 개의 프로섞슀륌 싀행할 수 있게 하는 Ʞ술을 말한닀. 볎통 하나의 프로귞랚 싀행에 대핮 하나의 프로섞슀가 메몚늬에 생성되지만, 부가적읞 Ʞ능을 위핎 여러개의 프로섞슀륌 생성하는 것읎닀.

멀티 프로섞슀 vs 멀티 프로섞서

프로섞슀(process)는 프로귞랚의 싀행 상태륌 말하고, 프로섞서(processer)는 CPU 윔얎륌 음컫는닀. 둘읎 ë‹šì–Žê°€ 유사핎서 굉장히 혌동할 수 있을텐데, ì–Žìš‹ë“  둘읎 의믞하는바는 완전히 닀륎닀고 볎멎 된닀.
따띌서 멀티 프로섞슀는 하나의 프로귞랚에서 여러 개의 프로섞슀륌 싀행하는 것을 의믞하고, 멀티 프로섞서는 여러 개의 CPU 윔얎가 하나의 시슀템에서 동시에 싀행되는 것을 의믞한닀.

멀티 프로섞슀 낎부륌 볎멎, 하나의 부몚 프로섞슀가 여러 개의 자식 프로섞슀륌 생성핚윌로서 닀쀑 프로섞슀륌 구성하는 구조읎닀. 한 프로섞슀는 싀행되는 도쀑 프로섞슀 생성 시슀템 윜을 통핎 새로욎 프로섞슀듀을 생성할 수 있는데, 닀륞 프로섞슀륌 생성하는 프로섞슀륌 부몚 프로섞슀(Parent Process)띌 하고, 닀륞 프로섞슀에 의핎 생성된 프로섞슀륌 자식 프로섞슀(Child Process)띌 한닀.

Multi Process

부몚 프로섞슀와 자식 프로섞슀는 각각 고유한 PID(Process ID)륌 가지고 있닀. 부몚 프로섞슀는 자식 프로섞슀의 PID륌 알고 있윌며, 읎륌 통핎 자식 프로섞슀륌 제얎할 수 있닀. 또한, 자식 프로섞슀는 부몚 프로섞슀의 PID와 PPID(Parent Process ID)륌 알고 있얎, 읎륌 통핎 부몚 프로섞슀와의 통신읎 가능하닀.

닀만, 통신읎 가능할 뿐읎지, 부몚 프로섞슀와 자식 프로섞슀는 엄연히 서로 닀륞 프로섞슀로 독늜적윌로 싀행되며, 독늜적읞 메몚늬 공간을 가지고 있얎 서로 닀륞 작업을 수행한닀. 대표적읞 예로 웹 람띌우저의 상닚 탭(Tab) 읎나 새 찜을 ë“€ 수 있닀. 각 람띌우저 탭은 같은 람띌우저 프로귞랚 싀행읎지만, 각Ʞ 닀륞 사읎튞 싀행을 행하Ʞ 때묞읎닀.

Multi Process

읎러한 람띌우저 멀티 프로섞슀 원늬륌 확읞하Ʞ 위한 ê°„ë‹ší•œ 싀험도 가능하닀. 여러개의 탭을 띄욎뒀, 하나의 탭에서 F12로 개발자 도구륌 ì—Žê³  윘솔 탭에 while(1) {} 묎한 룚프 윔드륌 싀행 시쌜볎자. 귞러멎 핎당 탭에서는 큮멭도 안되고 뚹통읎 되는 현상을 겜험할 수 있닀. 

Multi Process

하지만 닀륞 탭에는 정상적윌로 람띌우징읎 가능하닀. 읎는 탭 마닀 닀륞 프로섞슀로 동작하Ʞ 때묞읎닀.


멀티 프로섞슀의 장점

 

1. 프로귞랚 안전성

멀티 프로섞슀는 각 프로섞슀가 독늜적읞 메몚늬 공간을 가지므로, 한 프로섞슀가 비정상적윌로 종료되얎도 닀륞 프로섞슀에 영향을 죌지 않는닀. 귞래서 프로귞랚 전첎의 안전성을 확볎할 수 있닀는 장점읎 있닀.

예륌 듀자멎 크롬 람띌우저에서 여러개의 탭을 띄우고 여러곳의 웹사읎튞륌 방묞핎 서비슀륌 읎용한닀고 하자. 읎때 얎느 한 탭의 웹사읎튞에서 묎얞가 잘못되얎 뚹통읎 되었닀. 

multi-process

아죌 심각한 였류가 아닌 읎상, 당장 ê·ž 람띌우저 탭의 웹사읎튞는 읎용을 못하겠지만, 닀륞 탭은 별 묞제없읎 읎용읎 가능할 것읎닀. 읎러한 읎유는 자식 프로섞슀가 여러개 생성되얎 메몚늬에 별도로 ꎀ늬되Ʞ 때묞읎닀.

multi-process

 

2. í”„로귞랚 병렬성

멀티 프로섞슀와 여러개의 CPU 윔얎륌 활용하여 둘의 시너지륌 합쳐, 닀쀑 CPU 시슀템에서 각 프로섞슀륌 병렬적윌로 싀행하여 성능을 향상 시킬 수 있닀. 예륌 듀얎 읎믞지 처늬나 비디였 읞윔딩곌 같은 작업을 여러 개의 윔얎나 CPU에 분산시쌜 빠륎게 처늬할 수 있닀.

닀만, 읎 부분은 멀티 프로섞슀 만의 장점읎띌Ʞ 볎닚, 멀티 프로섞슀와 멀티 슀레드 둘의 장점읎 옳닀. 귞늬고 멀티 슀레드로 구성하는 것읎 멀티 프로섞슀로 구성하는 것볎닀 훚씬 횚윚적읎고 빠륎Ʞ 때묞에, 멀티 프로섞슀로 성능을 올늬는 행위는 거의 없닀고 볎멎 된닀. 읎에 대핎선 뒀의 멀티 슀레드 파튞에서 닀시 닀룬닀.

multi-process

 

3. 시슀템 확장성

멀티 프로섞슀는 각 프로섞슀가 독늜적읎므로, 새로욎 Ʞ능읎나 몚듈을 추가하거나 수정할때 닀륞 프로섞슀에 영향을 죌지 않는닀. 귞래서 시슀템의 규몚륌 쉜게 확장할 수 있닀.

읎 부분에 대핎서는 컎퓚터의 소프튞웚얎로 예시륌 드는 것볎닀 넀튞워크의 서버(server)로 드는 것읎 적절하Ʞ 때묞에 잠시 분산 서버에 대핎서 말핎볎겠닀. 대규몚 웹 서비슀에서는 수많은 요청을 동시에 처늬하Ʞ 위핎 여러대의 서버륌 두고 로드 밞런서(Load Balancer)와 같은 장비륌 사용하여 큎띌읎얞튞 요청 튞래픜을 분산 시킚닀. 읎때 여러대의 서버는 컎퓚터륌 여러개륌 말하는 것음 수도 있고, 하나의 성능 좋은 컎퓚터에 여러개의 서버 프로섞슀륌 두는 것을 말하Ʞ도 한닀. 멀티 프로섞슀의 상황은 후자읎닀.

서버 프로귞래밍을 핎볞 백엔드 개발자분듀은 서버 큎러슀터(cluster)륌 구성핎볞 적읎 있을 것읎닀. 하나의 컎퓚터에 여러개의 서버 프로섞슀륌 띄움윌로썚 요청을 분산시킀는 것읎닀. Node.js 진영에선 대표적윌로 PM2 가 있닀.

multi-process

읎렇게 멀티 프로섞슀륌 사용하여 여러 대의 서버에 요청을 분산시쌜 처늬핚윌로썚, 시슀템의 규몚륌 쉜게 확장할 수 있윌며, 부가로 서버의 장애나 닀욎타임을 최소화할 수 있게 되는 것읎닀.


멀티 프로섞슀의 닚점

 

1. Context Switching Overhead

멀티 태슀킹(multi tasking)을 구성하는데 핵심 Ʞ술읞 컚텍슀튞 슀위칭(context switching) 곌정에서 성능 저하가 올 수 있닀. 특히나 프로섞슀륌 컚텍슀튞 슀위칭 하멎, CPU는 닀음 프로섞슀의 정볎륌 불러였Ʞ 위핎 메몚늬륌 검색하고, CPU 캐시 메몚늬륌 쎈Ʞ화하며, 프로섞슀 상태륌 저장하고, 불러올 데읎터륌 쀀비핎알 하Ʞ 때묞에, 읎로 읞한 빈번한 Context Switching 작업윌로 읞핎 비용 였버헀드가 발생할 수 있게 된닀. 반멎 슀레드륌 컚텍슀튞 슀위칭하멎 프로섞슀 슀위칭 볎닀 가벌워 훚씬 빠륎고 좋닀.

프로섞슀 1에서 2로 슀위칭할때 아죌 앜간의 빈 시간(였버헀드)가 발생한닀

따띌서, 멀티 프로섞슀 환겜에서는 Context Switching Overhead륌 최소화하는 방법읎 쀑요하닀. 읎륌 위핎서 프로섞슀 수륌 적정하게 유지하거나, I/O 바욎드 작업읎 많은 프로섞슀와 CPU 바욎드 작업읎 많은 프로섞슀륌 분늬하여 ꎀ늬하고, CPU 캐시륌 횚윚적윌로 활용하는 등의 방법을 고렀핎 뎐알 한닀.

 

2. ìžì› 공유 비횚윚성

멀티 프로섞슀는 각 프로섞슀가 독늜적읞 메몚늬 공간을 가지므로, 결곌적윌로 메몚늬 사용량읎 슝가하게 된닀.

만음 각 프로섞슀간에 자원 공유가 필요할 겜우 프로섞슀 사읎의 얎렵고 복잡한 통신 Ʞ법읞 IPC(Inter-Process Commnuication)을 사용하여알 한닀.

IPC

IPC란 욎영첎제 상에서 싀행 쀑읞 프로섞슀 간에 정볎륌 죌고받는 메컀니슘을 말한닀. 읎륌 위핎 파읎프, 소쌓, 메섞지 큐 등 닀양한 방법읎 사용된닀. 귞런데 IPC 자첎로 였버헀드가 발생한닀. 예륌 듀얎, 파읎프나 소쌓곌 같은 IPC Ʞ법은 데읎터륌 복사하거나 버퍌링하는 곌정에서 성능 저하가 발생할 수 있Ʞ 때묞읎닀. 또한 윔드의 복잡도륌 슝가시킚닀.


Multi Thread

슀레드는 하나의 프로섞슀 낎에 있는 싀행 흐늄읎닀. 귞늬고 멀티 슀레드는 하나의 프로섞슀 안에 여러개의 슀레드가 있는 것을 말한닀. 따띌서 하나의 프로귞랚에서 두가지 읎상의 동작을 동시에 처늬하도록 하는 행위가 가능핎진닀.

웹 서버는 대표적읞 멀티 슀레드 응용 프로귞랚읎닀. 사용자가 서버 데읎터베읎슀에 자료륌 요청하는 동안 람띌우저의 닀륞 Ʞ능을 읎용할 수 있는 읎유도 바로 멀티 슀레드 Ʞ능 덕분읞 것읎닀. 슉, 하나의 슀레드가 지연되더띌도, 닀륞 슀레드는 작업을 지속할 수 있게 된닀.

Multi-Thread
넀튞워크, 데읎터베읎슀 작업을 하멎서 사용자와 상혞작용을 동시에

볎닀 멀티 프로섞슀와의 찚읎점을 부각시킀Ʞ 위핎, 멀티 프로섞슀륌 섀명할때 예시륌 듀었던 웹 람띌우저륌 닀시 듀얎볎겠닀. 멀티 프로섞슀는 웹 람띌우저에서의 여러 탭읎나 여러 찜읎띌고 말했었닀. 대신 멀티 슀레드는 웹 람띌우저의 닚음 탭 또는 ì°œ 낎에서 람띌우저 읎벀튞 룚프, 넀튞워크 처늬, I/O 및 Ʞ타 작업을 ꎀ늬하고 처늬하는데 사용된닀고 볎멎된닀.


멀티 슀레드의 장점

윈도우, 늬눅슀 등 많은 욎영첎제듀읎 멀티 프로섞싱을 지원하고 있지만 멀티 슀레딩을 Ʞ볞윌로 하고 있닀. 왜 멀티 프로섞슀 볎닀 멀티 슀레드로 프로귞랚을 돌늬는 것읎 유늬한지 ê·ž 읎유에 대핮 알아볎자. (읎는 슀레드 자첎의 장점읎Ʞ도 하닀)

 

1. 슀레드는 프로섞슀볎닀 가벌움

음닚 슀레드는 프로섞슀 볎닀 용량읎 가볍닀. 귞도 귞럎게 슀레드는 프로섞슀 낎에서 생성되Ʞ 때묞에 슀레드의 싀행 환겜을 섀정하는 작업읎 맀우 간닚하여 생성 및 종료가 빠륎닀. 또한 슀레드는 프로섞슀와 달늬, 윔드, 데읎터, 슀택 영역을 제왞한 나뚞지 자원을 서로 공유하Ʞ 때묞에 Ʞ볞적윌로 낎장되얎 있는 데읎터 용량읎 프로섞슀볎닀 당연히 ìž‘ë‹€. 귞래서 슀레드륌 생성하고 제거할 때, 프로섞슀 낎부의 자원만을 ꎀ늬하멎 되Ʞ 때묞에 프로섞슀 생성, 제거 볎닀 훚씬 빠륞 것읎닀.

 

2. ìžì›ì˜ 횚윚성

멀티 슀레드는 하나의 프로섞슀 낎에서 여러 개의 슀레드륌 생성되Ʞ 때묞에, heap 영역곌 같은 공유 메몚늬에 대핮 슀레드 간에 자원을 공유가 가능하닀. 읎륌 통핎, 프로섞슀 간 통신 (IPC)을 사용하지 않고도 데읎터륌 공유할 수 있Ʞ 때묞에, 자원의 횚윚적읞 활용읎 가능핎 시슀템 자원 소몚가 쀄얎든닀.

Multi-Thread

 

3. Context Switching 비용 감소

슀레드에도 컚텍슀튞 슀위칭 였버헀드가 졎재한닀. 하지만 상대적윌로 프로섞슀 컚텍슀튞 슀위칭 였버헀드볎닀 훚씬 낮아 비용읎 낮닀는 장점읎 있닀.

Multi-Thread

프로섞슀 컚텍슀튞 슀위칭 비용은 슀위칭할 때마닀 CPU 캐시에 있는 낎용을 몚두 쎈Ʞ화하고, 새로욎 프로섞슀 정볎륌 CPU 캐시에 적재핎알 하므로 높은 비용읎 ë“ ë‹€. 반멎, 슀레드 컚텍슀튞 슀위칭 비용은 슀위칭할 때 슀레드 간에 공유하는 자원을 제왞한 슀레드 정볎(stack, register)만을 교첎하멎 되므로 프로섞슀 컚텍슀튞 슀위칭 비용볎닀 상대적윌로 낮은 것읎닀.

 

4. 응답 시간 닚축

앞의 멀티 슀레드의 장점을 종합핎볎자멎, 멀티 슀레드는 슀레드 간의 통신읎나 자원 공유가 더욱 용읎하며, 프로섞슀 볎닀 가벌워 컚텍슀튞 슀위칭 였버헀드도 ìž‘ë‹€. 따띌서 멀티 프로섞슀 볎닀 응답 시간읎 빠륎닀.

예륌 듀얎, 웹 서버에서 큎띌읎얞튞 요청을 처늬하는 겜우, 멀티 프로섞슀 방식에서는 각 요청마닀 프로섞슀륌 생성하여 처늬핎알 하므로, 였버헀드가 크지만, 멀티 슀레드 방식에서는 여러 개의 슀레드가 하나의 프로섞슀 낎에서 요청을 처늬할 수 있윌므로, 였버헀드가 감소핎 더욱 빠륞 응답 시간을 볎장할 수 있는 것읎닀.

읎러한 읎유로, 멀티 프로섞서 환겜에서 멀티 슀레드륌 사용하여 작업을 처늬하는 것읎 멀티 프로섞슀륌 사용하는 것볎닀 더 횚윚적읎닀띌고 말할 수 있닀.


멀티 슀레드의 닚점

 

1. 안정성 묞제

멀티 프로섞슀 몚덞에서는 각 프로섞슀가 독늜적윌로 동작하므로 하나의 프로섞슀에서 묞제가 발생핎도 닀륞 프로섞슀듀은 영향을 받지 ì•Šêž° 때묞에 프로귞랚읎 죜지 않고 계속 동작할 수 있닀. 귞러나 멀티 슀레드 몚덞에서는 Ʞ볞적윌로 하나의 슀레드에서 묞제가 발생하멎 닀륞 슀레드듀도 영향을 받아 전첎 프로귞랚읎 종료될 수 있닀.

Multi-Thread

묌론 읎는 프로귞래뚞의 역량에 따띌 극복할 수 가 있닀. 예륌듀얎 슀레드에 에러가 발생할 겜우 읎에 대한 적절한 예왞 처늬륌 잘 핎놓는닀던지, 에러 발생 시 새로욎 슀레드륌 생성하거나 슀레드 풀(Thread Pool)에서 잔여 슀레드륌 가젞였던지 하여 프로귞랚 종료륌 방지할 수 있닀. 닀만, 읎때 새로욎 슀레드 생성읎나 놀고 있는 슀레드 처늬에 추가 비용읎 발생하게 된닀.

 

2. 동Ʞ화로 읞한 성능 저하

멀티 슀레드 몚덞은 여러 개의 슀레드가 공유 자원에 동시에 접귌할 수 있Ʞ 때묞에, 동Ʞ화 묞제가 발생할 수 있닀. 예륌듀얎 여러 슀레드가 동시에 한 자원을 변겜핎 버늰닀멎 의도되지 않은 엉뚱한 값을 읜얎 서비슀에 치명적읞 버귞가 생Ꞟ수도 있닀. 따띌서 슀레드 간 동Ʞ화(syncronized)는 데읎터 접귌을 제얎하Ʞ 위한 필수적읞 Ʞ술읎닀.

동Ʞ화 작업은 여러 슀레드듀읎 자원에 대한 접귌을 순찚적윌로 통제하는 것읎닀. 귞러멎 동시 접귌윌로 읞한 동시 수정곌 같은 현상은 음얎나지 않게 된닀. 귞러나 동Ʞ화 작업은 여러 슀레드 접귌을 제한하는 것읎Ʞ 때묞에 병목 현상읎 음얎나 성능읎 저하될 가능성읎 높닀는 닚점읎 있닀.

Multi-Thread

읎륌 핎결하Ʞ 위핎 임계 영역(Critical Section)에 대하여 뮀텍슀(mutex), 또는 섞마포얎(Semaphore) 방식을 활용한닀.

임계 영역(Critical Section)
- 멀티 슀레드 프로귞래밍에서 임계 영역은 공유 자원을 접귌하는 윔드 영역을 말한닀. 대표적윌로 전역 변수나 heap 메몚늬 영역을 ë“€ 수 있겠닀.

뮀텍슀(Mutex)
- 공유 자원에 대한 접귌을 제얎하Ʞ 위한 상혞 배제 Ʞ법 쀑 하나로, 임계 영역에 진입하Ʞ 전에 띜(lock)을 획득하고, 임계 영역을 빠젞나올 때 띜을 핎제하여 닀륞 슀레드듀읎 접귌할 수 있도록 한닀. 한마디로 였직 1개의 슀레드만읎 공유 자원에 접귌할 수 있도록 제얎하는 Ʞ법읎닀.

섞마포얎(Semaphore)
- 섞마포얎는 동시에 ì ‘ê·Œ 가능한 슀레드의 개수륌 지정할 수 있닀. 섞마포얎 값읎 1읎멎 뮀텍슀와 동음한 역할을 하며, 값읎 2 읎상읎멎 동시에 ì ‘ê·Œ 가능한 슀레드의 수륌 제얎할 수 있닀. 슀레드가 임계 영역에 진입하Ʞ 전에 섞마포얎 값을 확읞하고, 값읎 허용된 범위 낎에 있을 때만 띜을 획득할 수 있는 형식읎닀. 한마디로 뮀텍슀 상위 혾환 읎띌고 볎멎 된닀.

 

3. 데드띜 (교착 상태)

Deadlock 읎란, 닀수의 프로섞슀나 슀레드가 서로 자원을 점유하고, 닀륞 프로섞슀나 슀레드가 점유한 자원을 Ʞ닀늬는 상황에서 발생하는 교착 상태륌 말한닀. 여러 개의 슀레드가 서로 대Ʞ하멎서 묎한정 Ʞ닀늬게되는 묎한 룚프와 같은 슝상읎띌고 볎멎된닀.

예륌듀얎, 슀레드 1 은 자원 A을 점유하고 있는 상태에서 자원 B가 필요한 상황읎닀. 귞늬고 슀레드 2 는 자원 B륌 점유하고 있는 상태에서 자원 A읎 필요한 상황읎닀. 하지만 슀레드 1은 자원 B가 필요한 상황에서 자원 A을 빌렀쀄 수 있는 상황읎 아니고, 슀레드 2또한 자원 A읎 필요한 상태에서 자원 B륌 빌렀쀄 수 없는 상황읞 것읎닀.

읎처럌 닀수의 쓰레드가 같은 lock을 동시에, 닀륞 명령에 의핎 획득하렀 할 때 서로 절대 불가능한 음을 계속적윌로 Ʞ닀늬는 상황을 읎알Ʞ 한닀. 

Deadlock

읎러한 현상은 슀레드의 특징읞 공유 자원에 대한 동시 엑섞슀로 읞한 묞제로, 읎륌 방지하Ʞ 위한 상혞배제(Mutual Exclusion), 점유와 대Ʞ(Hold and Wait), 비선점(No Preemption), 순환 대Ʞ(Circular Wait) 등의 알고늬슘을 통핎 극복핎알 한닀.

닀만, 데드띜은 멀티 슀레드만의 닚점읎띌Ʞ 볎닀는 멀티 프로섞슀와 슀레드 몚덞의 공통된 묞제점읎띌고 말하는 것읎 옳닀. 왜냐하멎 프로섞슀 끌늬는 Ʞ볞적윌로 독늜적읞 메몚늬 공간읎지만 IPC륌 통핎 공유 자원을 사용할 수 있Ʞ 때묞에 멀티 슀레드와 똑같읎 교착 상태에 빠질 수 있Ʞ 때묞읎닀.

 

4. ê·žëž˜ë„ Context Switching Overhead

앞서 멀티 프로섞슀볎닀 멀티 슀레드의 컚텍슀튞 슀위칭 였버헀드가 작아 성능에 유늬하닀띌고 섀명했었지만, 귞래도 컚텍슀튞 슀위칭 였버헀드 비용 자첎륌 묎시할수는 없닀. 특히나 슀레드 수가 많윌멎 많을 수록 귞만큌 컚텍슀튞 슀위칭읎 많읎 발생되게 되고 당연히 읎는 성능 저하로 읎얎진닀.

읎 부분은 '슀레드륌 많읎 쓞수록 항상 성능읎 좋아질까?' 띌는 묌음윌로 던질 수 있닀. 볎통 사람듀읎 생각하Ʞ에는 슀레드가 많윌멎 많을 수록 귞만큌 동시 처늬수가 늘얎나 당연히 슀레드가 많윌멎 묎조걎 좋닀고 읎알Ʞ할 것읎닀. 하지만 '컚텍슀튞 슀위칭 였베허드'띌는 개념을 알고 있는 개발자읞 우늬듀은 '곌연 ꌭ 귞럎까?' 띌는 의묞을 던젞알 한닀.

읎 부분은 슀레드륌 겉햝Ʞ로만 배욎 지원자륌 걞러낎Ʞ 위핎 Ʞ술 멎접에서 가끔 등장하는 고수쀀의 질묞읎Ʞ도 하닀. 읎에 대한 자섞한 낎용은 아래 포슀팅을 찞고하Ꞟ 바란닀.

-------------------------------------- 링크 나쀑에 추가 --------------------------

 

5. ë””버깅읎 얎렀움

멀티 슀레드륌 사용하멎, 여러 개의 슀레드가 동시에 싀행되Ʞ 때묞에, 각 슀레드의 동작을 추적하Ʞ 얎렀욞 수 있닀. 예륌듀얎 윔드륌 디버깅하는 도쀑에 닀륞 슀레드가 싀행되얎 예Ʞ치 않은 결곌가 발생할 수 있닀. 또한 ì–Žë–€ 슀레드가 ì–žì œ ì–Žë–€ 자원에 접귌하고, ì–Žë–€ 순서로 싀행되는지 등을 파악하Ʞ 얎렀욞 수 있닀.

따띌서 슀레드 간의 상혞작용곌 동Ʞ화 Ʞ법을 잘 읎핎하고, 디버깅 도구륌 적극적윌로 활용핎알 한닀.

Multi-Thread

 

6. ìšŽì˜ì²Žì œì˜ ì§€ì›ìŽ í•„ìš”

였늘날의 윈도우, 늬눅슀, 맥 OS에선 몚두 Ʞ볞적윌로 멀티 슀레딩을 Ʞ볞적윌로 지원하도록 섀계 되었윌니 묞제점읎띌Ʞ에는 앜간 얎폐가 있ꞎ 하닀. 하지만, 1980년대의 SunOS3와 같은 였래된 유닉슀 시슀템에는 슀레드가 없었고 프로섞슀만 있는, 멀티 슀레딩을 지원하지 않는 욎영 첎제가 있었Ʞ 때묞에 멀티 슀레드의 닚점윌로 넣얎 볎았닀. (귞만 잊얎도 된닀 😅)


# 찞고자료

https://brunch.co.kr/@huewu/4

https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37

https://eunjinii.tistory.com/41

https://jojozhuang.github.io/programming/java-concurrency-dead-lock/