×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,101,837명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형



이전 소켓 프로그래밍 게시물에서는 fork를 통한, alarm을 통한 다중 통신을 해보았다.


이번에는 스레드를 이용한 Concurrent Programming을 해보고자 한다.


이 내용을 기술하기에 앞서 Thread가 뭔지, 잠깐 짚고 넘어가보고자 한다.



Thread란?


- 프로세스의 일부분으로써 적어도 하나의 스레드는 프로세스에 존재한다.

(즉, int main()이 메인 스레드이고, 프로세스에 스레드가 하나도 없을 순 없다.)


- 스레드는 자신의 프로세스 내부의 자원을 공유하기도 하고, 자신만의 영역을 가지기도 한다.

  레지스터 내용, PC(Program Counter), Stack pointer, 코드내용, 스레드가 따로 가지는 스택(Stack),

  Thread ID 등이 있다.


  스레드가 공유하는 것은 프로세스의 메모리 주소를 공유한다.

- 또한 스레드는 스케줄러에 의해 관리되기 때문에 스레드 프로그래밍을 할 시, 어떤것이 먼저 돌지 모른다.


 프로세스 VS 스레드 - 공통점


  - PID(Process ID), TID(Thread ID)를 가지고 있다.

  - 컨트롤 플로우가 있다.

  - stack 및 SP가 있다.

  - concurrently하게 실행 할 수 있다.

  - 컨텍스트 스위칭이 일어난다.


 프로세스 VS 스레드 - 차이점


  - 스레드는 프로세스의 리소스를 공유 할 수 있다. (프로세스도 가능하긴하나(IPC를 이용) 어렵다.)

  

  - 프로세스가 가지는 것

  - 주소공간, 프로그램 코드, 전역 변수, 힙, 스택, OS 자원(files, I/O devices 등등)을 가지고 있다.


  - 스레드가 공유 하는 것

  - 주소공간, 프로그램 코드, 전역 변수, 힙, OS resources(files, I/O device)


  - 스레드 자신이 가지고 있는것 :

  - 레지스터, PC, Stack, SP(Stack Pointer)  등


  - 프로세스보다 스레드가 더 가벼워서(가볍다는 느낌) 더 빠르게 만들고 지울 수 있다.






프로세스 vs 스레드 - 스레드의 특성


- 스레드는 특정 프로세스에 묶인다.

  - 프로세스는 그것 내부 컨트롤하는 많은 스레드들을 가지고 있다. 

  - 스레드는 block, create children 등등을 할 수 있다.


- 프로세스 속 스레드들의 모든 것

  - 주소공간, 프로그램 코드, 전역 변수, 힙, os 자원을 공유한다.

  - 동시에(concurrently) 실행한다 (스레드 자신만의 레지스터, PC, SP등등 값을 가지고)



이렇듯, 프로세스 단위가 아닌 스레드 단위를 만들어 서버를 제공하면, 훨씬 더 효과적인 서버를 제작 할 수 있게 된다.


다음 게시물에서는 유닉스/리눅스에서 쓰이는 Posix Thread에 대해 알아본다.


반응형