|
| 1 | +# 스레드와 프로세스 |
| 2 | + |
| 3 | +Q. 스레드는 무엇인가요? |
| 4 | + |
| 5 | +Q. 멀티 프로세스는 무엇인가요? |
| 6 | + |
| 7 | +- |
| 8 | + |
| 9 | + 동시에 진행된다는 것은 무슨 의미인가요? |
| 10 | + |
| 11 | + |
| 12 | +- 용어 정리 |
| 13 | + 1. **실행 단위** : cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념 (즉, 실행 단위가 프로세스일 수도 있고, 스레드일 때도 있음!) |
| 14 | + 2. **동시성** : 한 순간에 여러가지 일이 아니라, **짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼**! 보이는 것 |
| 15 | + |
| 16 | +- **프로그램**이란? |
| 17 | + |
| 18 | + Program은 실행 파일! |
| 19 | + |
| 20 | + 파일 시스템에 존재하는 파일! 이 파일에는 컴퓨터가 수행해야 할 작업이 정의되어 있음. 일반적으로 특정 작업을 수행하는데 필요한 알고리즘과 데이터 처리 절차를 적은 소스 코드가 담겨있음. |
| 21 | + |
| 22 | + |
| 23 | +- **프로세스**란? |
| 24 | + |
| 25 | + 프로세스는 사용자가 프로그램을 더블클릭하여 실행을 시킨 프로그램의 인스턴스를 의미한다. |
| 26 | + |
| 27 | + |
| 28 | +프로그램 → 프로세스를 위한 과정? |
| 29 | + |
| 30 | +1. 프로세스가 필요로 하는 내용들이 메모리 공간을 확보하게 됨 |
| 31 | + - Code : 실행 명령을 포함 |
| 32 | + - Data : Static 변수 혹은 Global 변수 |
| 33 | + - Heap : 동적 메모리 영역 |
| 34 | + - Stack : 지역변수, 매개변수, 반환 값 등등 일시적인 데이터 |
| 35 | +2. 해당 프로세스에 대한 정보를 담고 있는 PCB(Process Control Block)가 프로세스 생성시 함께 만들어짐. |
| 36 | + |
| 37 | +  |
| 38 | + |
| 39 | + |
| 40 | +그렇다면 여러 개의 프로세스를 실행시키려면? |
| 41 | + |
| 42 | +**Context Switching** |
| 43 | + |
| 44 | +- CPU는 한 번에 하나의 프로세스만 처리할 수 있기 때문에! |
| 45 | +- 여러 프로세스를 처리해야 하는 상황에서 현재 진행 중인 Task의 상태를 PCB에 저장하고 다음에 진행할 Task의 상태 값을 읽어 적용하는 과정 |
| 46 | +- 즉, 각 프로세스에게 CPU를 할당해 작업을 수행하는 과정 |
| 47 | +- but, 복잡해!! |
| 48 | + |
| 49 | +  |
| 50 | + |
| 51 | + |
| 52 | +→ 그래서 나온 게 **쓰레드**! |
| 53 | + |
| 54 | +** 멀티 프로세스와 멀티 스레드는 처리 방식의 일종! |
| 55 | + |
| 56 | + 한 어플리케이션에 대한 두 가지 다른 처리방식에 대한 이야기를 하는 거구나!라고 이해하고 시작하자. |
| 57 | + |
| 58 | +- 프로세스는 부모 프로세스가 fork()하여 자식 프로세스를 만들고, 이를 처리하게 됨. 이 때 자식 프로세스들은 부모와 별개의 메모리를 차지하게 됨. |
| 59 | +- 반면, 스레드는 한 프로세스 내에서 구분 지어진 실행 단위! |
| 60 | + |
| 61 | +- **Multi-process** : |
| 62 | + - 각 프로세스는 독립적 |
| 63 | + - IPC(Inter Process Communication)를 사용한 통신 |
| 64 | + - 자원 소모적, 개별 메모리 차지 (별도의 자원 할당) |
| 65 | + - Context Switching 비용이 큼 |
| 66 | + - 동기화 작업이 필요하지 않음 |
| 67 | + |
| 68 | +- **Multi-thread**: 하나의 프로세스를 다수의 스레드로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것 |
| 69 | +- Thread끼리 긴밀한 연결 |
| 70 | +- 공유된 자원으로 통신 비용 절감 |
| 71 | +- 공유된 자원으로 메모리가 효율적 |
| 72 | +- Context Switching 비용이 적음 |
| 73 | +- 공유 자원 관리를 해야함 |
| 74 | + |
| 75 | +그렇다면 thread를 이용하는 것이 더 좋아보이는데? |
| 76 | + |
| 77 | +but, 스레드는 긴밀하게 연결되어 있기 때문에 한 스레드 문제가 생기면 다른 스레드도 영향을 받음. |
| 78 | + |
| 79 | +또한 **동기화 문제**도 발생할 수 있음. |
| 80 | + |
| 81 | + |
| 82 | + |
| 83 | +- c.f) **Multi-core** : 하드웨어즉 측면에 가까운 개념. |
| 84 | + |
| 85 | + 물리적으로 여러 코어를 사용하여 다수의 실행 단위를 병렬적으로 한 순간에 처리할 수 있도록 하는 것. 하나의 코어를 갖고 있다면 멀티 프로세스에 대해 짧은 텀으로 cpu 할당을 바꿔주어 마치 동시에 진행되는 것처럼 보이게 하는 것. |
0 commit comments