💡키워드 정리
- 실행 단위
- cpu core에서 실행하는 하나의 단위
- **프로세스**와 **스레드**를 포괄하는 개념
- 프로세스
- 하나의 스레드만 갖고 있는 단일 스레드 프로세스
- 동시성
- 한 순간에 여러 가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것 처럼 보이는 것
프로그램과 프로세스의 차이
- 프로그램 : 피자의 레시피와 같은 개념. 코드 파일로 구현되었고 실행되기 전엔 효력이 없다.
- 프로세스 : 만들어진 피자와 같은 개념. 프로그램이 실행될때 생성됨.
** 보조기억장치에 있던 프로그램이 실행되면서 메모리 공간에 할당됨.
프로세스(Process)
- 프로그램을 실행하면 파일은 운영체제에 의해 메모리 공간에 할당됨. 이 때, 자원을 할당받은 작업의 단위
- 운영체제는 프로세스마다 각각 독립된 메모리 영역을 Code/Data/Stack/Heap 형식으로 할당
- Data : 전역변수들이 저장
- Stack : 함수의 매개변수, return 주소, local 변수 등을 저장
- heap : 프로그램 실행 중 동적으로 할당되는 값들이 저장
- 각 프로세스는 별도의 메모리 공간을 차지하므로 IPC(Inter Process Communication)을 사용해야 함
멀티프로세스
- 원래 하나의 프로세스가 CPU를 점유하고 있으면 다른 프로세스가 실행상태에 있을 수 없음
- 다수의 프로세스를 동시에 실행하기 위해서 여러 개의 프로세스를 시분할로 전환해서 실행하도록 함
특징
-> 그러나 여러 프로세스를 전환(Context Switching)해가는 것은 어려운 일임(큰 Cost)
- 각 프로세스는 독립적인 메모리를 차지함
- IPC를 사용한 통신이 필수적
- Context Switching 비용이 큼
- 동기화 작업이 필요하지 않음
단점
- Context Switching이 발생하면 데이터를 모두 리셋해야 하므로 오버헤드가 매우 큼
한 앱에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식(멀티프로세스, 멀티스레드)가 있습니다.
쓰레드(Thread)
- 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위
- 경량화된 프로세스
- 기본적으로 프로세스는 최소 1개의 쓰레드를 갖고 있음. 이를 메인 쓰레드라고 함.
멀티스레드
[하나의 process 내에서 일어나는 일을 가정했을 때]
[https://m.blog.naver.com/three_letter/220333796848]
- 하나의 프로세스 내에서 분리되어 실행되는 것
- 각 Thread 끼리는 긴밀하게 연결되어 있음
특징
- 공유된 자원으로 통신 비용 절감/메모리가 효율적
- Context Switching이 용이함(Low Cost)
- 공유 자원(Code, Data, heap)을 관리해야 함
- 각 쓰레드는 각자의 스택과 PC 레지스터 값을 갖고 있음
왜 스택 및 레지스터 값을 따로 갖고있어야 할까요? 위에서 설명한 Stack 및 레지스터의 역할로부터 추론하여 봅시다.
단점
- 각 스레드가 긴밀하게 연결되어 있기 때문에, 한 쓰레드에 문제가 생기면 전체에 영향을 미침
- 구글 크롬 : 멀티프로세서를 이용하기 때문에 멀티탭 간의 영향을 덜 받음
멀티코어(MultiCore)
- 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세서가 있는 것
- 멀티프로세스와 멀티쓰레드는 처리 방식의 일종이라고 할 수 있음
-> 이에 반해, 멀티코어는 하드웨어 측면에 가까움
동시성(Concurrency) : 하나의 Core 에서 일어나는 것
- 실행 단위를 처리할 때 동시에 여러가지 진행을 위해 짧은 텀으로 전환되면서 실행되는 것
- 실제로 동시는 아니고 마치 동시에 일어나는 것처럼 느껴지게 함
병렬처리(Parallelism) : 여러 Core에서 일어나는 것
- 둘 이상의 코어에서 동시에(이건 말 그대로 동시에) 하나 이상의 프로세스가 한꺼번에 진행되는 것
정리🧐
Reference