컴퓨터의 여러 thread(작업들)가 CPU의 각 코어에서 언제 실행될지 결정하는 과정(참고로, 1개의 코어는 한번에 1개의 thread만 돌릴 수 있다. 단지, 매번 thread를 바꾸면서 실행해 동시에 많은 일을 하는 것처럼 보이는 것.)
예를 들어, 게임을 하면서 음악을 들으면, 스케줄러가 게임 thread를 더 중요하게 생각하고 음악 스레드를 나중에 처리할 수 있다.
Thread의 우선순위(각 Thread마다 우선순위가 다르다)와 CPU 사용 상태를 고려해 thread를 배정한다.
Thread Safe하게 코드를 짠다는 것은?
- Lock, Mutex, Semaphore와 같은 동기화 도구들을 사용해서 여러 thread가 동시에 같은 자원에 접근하지 못하도록 해야 한다.
- Atomic 연산을 사용하여 특정 변수에 대한 연산이 중간에 다른 스레드로부터 방해받지 않도록 해야 합니다. Atomic 연산은 하나의 단일 단계로 이루어져, 중단 없이 안전하게 실행된다.
- 불변 상태 유지. 데이터를 변경할 필요가 없다면, 여러 스레드가 동시에 접근하더라도 문제가 없다.
- Thread 간 자원 공유를 최소화하는 것이 효과적입니다. Thread들이 각각 독립적으로 작업할 수 있도록 설계하고, 공유 자원이 필요한 부분을 최소화하면 충돌 위험을 줄일 수 있다.