프로세스는 "프로그램이 실행되기 위해 메모리에 할당된 것"이다

스레드는 프로세스 속에 존재하는 개념으로, 실제로 작업을 처리하는 worker의 개념이다 (Thread와 context?)


프로세스는 스레드를 포함하는 관계이며, 1개의 프로세스에는 1개 이상의 스레드가 존재한다.


---


OS 관점이 아니라 concurrency 관점에서 바라보면, multi-process vs multi-thread가 된다

<multi-process vs multi-thread)


첫번째는 global 변수, dynamic allocation된 메모리와같은 shared data.

multi-process는 모든 데이터를 별도로 가지기 때문에, shared data에 의한 racing이 발생하지 않는다

반면 multi-thread는 stack segment memory만을 별도로 가지기 때문에, shared data를 동시에 write할 때 sync(동기화)를 해야한다

(multi-process > multi-thread)


두번째는 communication.

첫번째와 반대로, multi-process에서는 통신을 위해 IPC를 해야한다. 예를 들면 pipe, signal, socket(주로 network), 세마포어(semaphore), shared memory(C언어의 shm*()), MM I/O

그에 비해 multi-thread는 IPC가 필요없이, shared data들을 통해 간단하게 통신이 가능하다 (sync가 필요하다 하더라도 IPC보다 간단하다)

(multi-process < multi-thread)


세번째는 memory 사용량.

process가 더 많은 메모리를 사용하므로, 메모리 사용량 면에서 비효율적이다

이것은 context switching도 비효율적으로 만든다 (더 많은 메모리를 switching해야하기 때문) (cache hit ratio까지 떨어뜨린다?)


---


process vs thread와 multi-process vs multi-thread를 동일하게 생각하고 있었는데, 서로 다른 레벨의 관점이었다. 

구분해서 기억해두자


'etc' 카테고리의 다른 글

[Database] Transaction / ACID  (0) 2017.12.10
HTTP state code 2xx, 4xx, 5xx  (0) 2017.12.10
[Database] RDB, NoSQL, In-memory DB 비교  (0) 2017.12.09
[Database] redis docker & python redis 설치하기  (0) 2017.12.07
FFmpeg vs Libav 차이점  (0) 2017.11.29

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/