프로세스는 "프로그램이 실행되기 위해 메모리에 할당된 것"이다
스레드는 프로세스 속에 존재하는 개념으로, 실제로 작업을 처리하는 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/