순서
1. Process와 Thread를 알기 전(feat.용어정리)
2. 프로그램과 프로세스(Process)
3. 프로세스와 스레드(thread)
4. Multi-process와 Multi-thread
5. Multi-core
유튜브 [10분 테코톡] 🌷 코다의 Process vs Thread 의 내용
Process와 Thread비교는 면접 단골 질문이라고 한다
영상에서는 질문에 어떻게 대답할지에 대한 생각으로 내용이 시작된다
(비슷한 뜻의 단어가 많이 나와서 단어를 혼용하지 않는 것에 집중했다고 한다)
cpu core에서 실행하는 하나의 단위, 프로세스와 스레드를 포괄하는 개념
하나의 스레드만 가지고 있는 단일 스레드 프로세스
한 순간 여러가지 일이 아니라, 짧은 전환으로 여러가지 일들을 동시에 처리하는 것처럼 보이는 것
영상에서는 피자라는 키워드로
피자 레시피 = 프로그램
피자 = 프로세스
라 설명하고 있다
이처럼 프로그램 자체는 실행시키기 전에는 코드가 구현되어 있는 파일일 뿐이다
종이레시피가 피자가 되는 것 처럼 프로그램이 실행이 되어 사용할 수 있는 무언가가 되는게 프로세스이다
2가지 변화가 생긴다고 할 수 있다
프로세스가 실행되는데 필요한 재료들이 메모리에 올라가야 하고, 메모리는 아래와 같은 모습이다
위는 메모리의 모습이다
Code = 실행 명령을 포함하는 코드들
Data = Static 변수 혹은 Global 변수
Heap = 동적 메모리 영역
Stack = 지역변수, 매개변수, 반환 값 등 일시적 데이터
위와같은 것들이 메모리 공간을 확보한다
해당 프로세스에 대한 정보를 담고 있는 PCB이 만들어 진다
pointer = 프로세스 상태 중 준비, 대기 상태를 구현
Process State = 현제 프로세스의 상태
PID = 고유번호
Program Counter = 다음 명령어를 가르킨다
등등
Process는 위의 프로그램과 프로세스에서 알아봤다
우리는 컴퓨터를 사용할 때 여러개의 프로세스를 사용하려고 한다(코딩을 하면서 음악을 듣는다거나 등등)
이런 다수의 프로세스를 동시에 실행시키기 위해 다수의 프로세스를 시분할로, 짧은 텀을 반복하면서 전환하며 실행시킨다
즉 위와같이 다수의 프로세스들을 CPU에 돌아가면서 CPU에 적재, 준비상태로 돌아가는 컨텍스트 스위칭을 한다
이런 컨텍스트 스위칭은 피곤한 작업이 될 수 있다
그래서 등장한게 바로 경량화된 프로세스 버전인 스레드이다
프로세스가 경령화된 프로세스 버전인 이유는 하나의 프로세스안에 다수의 스레드가 있을 때 공유되는 자원이 있기 때문이다
스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용한다
즉 각 스레드는 각각의 스택만을 사용하는 것이다
이처럼 공유하는 자원이 있기 때문에 컨텍스트 스위칭이 일어날 때 캐싱 적중률이 올라간다
쉽게 말해 CPU에 프로세스를 모조리 다 빼고, 넣을 필요가 없게 됐다는 말이다
멀티프로세스와 멀티스레드 두 가지 개념이 모두 처리방식의 일종이다
두 개념 모두 어플리케이션에 대한 다른 처리방식에 대해 이야기 하는 것이라 생각하면 된다
예를 들어 여러 사용자가 로그인을 요청하는 상황이 있다
한 프로세스는 매번 하나의 로그인만 처리 할 수 있기 때문에 동시에 처리할 수 없다
그래서 부모 프로세스가 fork를 해서 자식 여러 개의 자식 프로세스를 만들어 일을 처리하도록 한다
이 때 자식프로세스는 부모와 별개의 메모리 영역을 확보하게 된다
Multi-thread는 위의 Multi-process와 다르게 한 프로세스 내에서 구분지어진 실행 단위라고 할 수 있다
그래서 만약 프로세스가 다수의 스레드로 구분되어 있지 않으면 단일 스레드 하나로 프로세스가 실행된다
이 때 실행단위는 프로세스 그 자체가 된다
즉 해당 프로세스의 하나밖에 없는 쓰레드가 실행 단위가 되는 것이다
프로세스에서 여러 스레드로 실행단위가 나누어지면 멀티 스레드가 된다
Multi-process
Multi-thread
Multi-thread를 사용하는 예로는 인터넷 익스플로어가 있다
멀티 스레드를 이용해서 여러 개의 탭에 중요한 정보들을 띄어놓고 작업을 하다가 오류가 뜨면 전체 프로세스의 영향이 간다
Multi-process를 사용하는 예로는 크롬이 있다
크롬은 조금 비효율적일 수 있지만 멀티프로세서를 이용해서 멀티탭 간 영향을 덜받는다
Multi-core는 비슷한 느낌이 들지만 조금 다른 관점에서 봐야한다
위의 멀티프로세스와 멀티쓰레드는 '처리방식'의 일종이라 소프트웨어분야에 가깝고 멀티코어는 하드웨어분야에 가깝다
위에서 싱글코어를 가진 cpu가 동시에 여러 가지 일을 처리하기 위해 빠른 텀으로 전환되며 실행되는 컨텍스트 스위칭이 일어나고, 동시에 일이 처리되는 것 처럼 보이게 되는 것이 동시성이다
멀티코어는 물리적으로 여러 코어를 사용해 다수의 실행 단위를 한 순간에 동시에 처리할 수 있게 해준 것이고 이러한 것이 병렬처리이다
영상 마지막에 더 자세한 스레드의 종류(사용자/커널)로 나뉘어 지고 연관관계에 대한 간단한 설명을 해주시는데 이 개념이 궁금하다
또 영상 마지막에 리눅스의 쓰레드와 관련해서 PID, TGID에 대한 설명을 스레드의 종류와 관련하여 해주시는데 학교 역량강화(Docker)시간에 리눅스를 사용하며 PID... 본 경험이 떠올라서 이 PID, TGID에 대한 내용이 궁금하다
Multi-process에서 부모프로세스를 fork하여 자식프로세
스를 만들어 일을 처리한다고 했는데 이 fork하는 과정이 궁금하다
학교에서 컨텍스트 스위칭 방법들을 배웠던 것 같은데 방법들도 정리해놓고 싶다
어떤velog글과 댓글을 보다가 Process와 Thread에 대한 내용을 보고 반성해서 이 Process와 Thread에 대한 내용을 10분 테코톡에 찾아보게 되었다. 학교(컴퓨터일반, 컴퓨터구조)에서 배운 내용이라 어느정도 알고 있다고 생각했는데 개념적인 부분(동시성 등)이 더 있었던 것 같고 그냥 배웠을 때와 내가 찾아서 배우는 내용은 내자세가 달라지다 보니 더 이해하기 쉽다는 걸 느꼈다.