유튜브: 얄팍한 코딩사전 - 프로세스와 스레드
유튜브: 코딩하는초롱
유튜브: 우아한Tech - Process vs Thread
유튜브: 우아한Tech - Blocking vs Non-Blocking, Sync vs Async
유튜브: 코딩하는거니-코어와스레드
여러 프로세스/쓰레드를 빠르게 교차하면서 동시에 실행되는 것처럼 보이는 것. 여러 작업을 동시에 처리하는 것 같지만 실상은 멀티태스킹
하나의 프로세서에 여러 개의 코어가 달려서 각각 동시에 작업들을 수행하는 것. 실제로 2개 이상의 코어에서 동시에 여러 작업이 처리되는 것
CPU에 내장된 처리회로. 명령어를 메모리에서 읽어 해석하고 실행하는 반도체 유닛
프로그램이 실행되어 돌아가고 있는 상태. 프로세스들은 컴퓨터의 전체 자원을 분할해서 사용
프로세스 생성 시, (1)Code/Data/Heap/Stack 영역이 메모리에 올라간다, (2)해당 프로세스에 대한 정보를 담고 있는 PCB가 만들어진다
OS는 여러 프로세스를 돌리기 위해 Context Switching을 통해 코어가 실행할 프로세스를 시분할로 교체한다
프로세스들은 서로 독립적이므로 IPC를 통해 통신한다. 그리고 보통 별개의 프로세스로 나누는 경우 동기화 작업에 신경을 덜 써도 되는 경우가 많다
하나의 프로세스 내에서 여러 갈래의 작업들이 동시에 진행될 필요가 있다. 실행단위를 이 갈래를 스레드라고 부른다
스레드는 일종의 경량화된 프로세스라 볼 수 있다. 왜냐하면 하나의 프로스세 안에 다수의 스레드가 있을 때 보통 Stack을 제외한 자원 영역(Code, Data, Heap)을 공유하는 경우가 많기 때문
이렇게 자원을 공유하는 것이 속도와 효율 면에서 좋지만 race condition에 대한 대비가 필요하다
CPU에서의 스레드는 'CPU 제조사의 기술'의 이름을 말하고, 우리가 일반적으로 알고 있는 스레드는 논리적인 '소프트웨어 스레드'를 말한다
Hyper-Threading(intel) / SMT(AMD)
하나의 코어를 내부적으로 두 개의 스레드로 나누어 마치 두 개의 물리적인 코어가 있는 것처럼 만듦. 일을 따로따로 시켜보니 잘 하더라. (구체적으로 무슨 마법을 부렸는지는 따로 알아볼 것)
예로, 1코어 2스레드 CPU는 물리적인 코어는 1개지만 밖으로 보이는 코어는 2개이므로 OS는 2코어로 인지한다
논리적인 코어라 볼 수 있음
둘을 구분하는 기준은, 다른 주체가 작업할 때 자신의 '제어권'이 있는지 없는지로 볼 수 있다
둘을 구분하는 기준은, 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 아닌지로 볼 수 있다
사실 이런 추상적인 개념들을 현실에서는 모든 상황에서 뚜렷하게 분류하긴 어렵다