CPU 코어 하나 당 하나의 쓰레드 만을 실행시킬 수 있다.
CPU 코어는 비동기적으로 아주 빠르게 쓰레드에 빙의하여 한 번씩 실행시킬 수 있다. A 쓰레드에서 일을 했다가 중간에 B쓰레드로 옮겨가서 일하는 방식이다.
그래서 마치 병렬적으로 동시에 실행되는 것 처럼 보이게 된다.
컴퓨터에서 동시에 여러 프로그램이 병렬적으로 실행되고 있는 것 같지만 사실 CPU가 이 쓰레드 저 쓰레드 옮겨 다니면서 일하고 있는 것이다.
운영체제 모드
유저 영역 : 운영 체제에서 유저가 사용하는 영역
커널 영억: 운영 체제의 핵심적인 영역. 스케줄링을 담당한다. 다음 프로그램에 어떤 것을 실행 시킬 지, 어떤 쓰레드를 실행해야 할지 등의 우선순위를 결정한다.
멀티 코어는 CPU가 여러개인 환경을 말한다. 때문엥 코어 수에 맞게 여러 쓰레드들을 병렬적으로 실행시킬 수 있다.
하지만 쓰레드를 늘린다고 성능이 좋아지는 것은 아니다. CPU코어가 쓰레드를 옮겨 다니는 과정이 부하가 크기 때문이다.
그래서 한 코어 당 한 쓰레드만 실행하는 것이 가장 이상적이다.
각 쓰레드들 마다 고유한 스택을 가진다. 스택에 저장된 데이터들은 문제가 되지 않는다.
하지만 힙, Data 영역에 저장된 데이터들은 모든 쓰레드들이 공유해서 사용한다. 이 부분에서 문제가 발생한다.
따라서 어떻게 하면 쓰레드들을 얽히지 않게 효율적으로 관리할 수 있는지가 중요한 문제이다.
위 필기는 다음 블로그의 내용을 참조하여 작성했습니다.
https://ansohxxn.github.io/server1/ch1-1/