출처 : https://core.ewha.ac.kr/publicview/C0101020140321143516139010?vmode=f

스레드는 왜있을까?? 프로세스는 실행중인 프로그램을 프로세스라고 한다. 이 프로세스(프로그램)은 졸라게 복잡한 계산을 필요로 한다고 가정해보자. 어떻게 컴퓨터 운영체제의 부하를 줄이면서 최대한 빠르게 계산을 처리할 수 있을까??

 

바로 스레드를 사용하면 된다. 위의 그림을 간략히 설명하면 Code 영역에 실행해야할 명령어 집합(instruction)이 들어있고 data영역에 전역변수와 같은 변수들이 들어 있다. 계산을 할 때는 CPU만 졸라게 빨리 움직이면 되기 때문에 Code와 data영역은 공유하고 다음에 수행해야할 명령어 주소를 가르키는 PC 값을 각각 쓰레드에 매핑 시킨 후 계산을 처리하면 된다! (뒤에 좀 더 자세히)

 

 

출처 : https://core.ewha.ac.kr/publicview/C0101020140321143516139010?vmode=f

그래서 Thread는 하나의 프로세스에서 독립된 PC, register set, stack space를 가지며 code와 data, OS resource를 공유한다.

 

다음에 수행할 명령어(instruction)를 가르키는 PC값과 CPU 연산을 위해 필요한 임시 저장 공간 register, 함수를 실행하기 위한 고유의 stack 영역이 스레드마다 각각 필요하다는 말이다.

 

스레드를 좀 더 자세히 기술하면 하나의 스레드가 blocked(waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행되어 좀 더 빠르게 처리를 할 수 있다는 뜻이다.

 

하나의 스레드가 blocked 되었단 말은 I/O 작업 같이 오랜 시간이 걸리는 작업을 할 때를 뜻한다. 예를 들면 웹 브라우저에서 고용량 이미지를 받아올때다.

 

동일한 태스크 내(하나의 브라우저 안에서) 다른 스레드가 실행 된다(고용량 이미지를 받아오지만, 이미지를 받아오는 I/O 스레드가 blocked될 동안 일반 텍스트를 Display 해주는 스레드는 일함) 

 

 

출처 : https://core.ewha.ac.kr/publicview/C0101020140321143516139010?vmode=f

위의 그림은 싱글스레드와 멀티스레드의 차이를 그림으로 보여준다.

 

끝!

+ Recent posts