본문 바로가기

Programming/JAVA

멀티 스레드(3) - 스레드 우선순위 1

JAVA logo image

 

 

 

스레드에 있어서 '우선순위'개념은 왜 필요한 것일까요? 우선, 기본적으로 하나의 코어에서는 하나의 스레드를 실행한다고 이해하면 되겠습니다. 이 때, 코어의 개수에 따라서 동시성(Concurrency) / 병렬성(Parallelism)을 갖게 됩니다. 여기서 "동시성"과 "병렬성"의 개념적 차이는 무엇일까요? 

 

대표적인 설명을 들자면, 이는 싱글 코어와 멀티 코어의 차이로 생각하시면 되겠습니다. [동시성]은 하나의 코어에서 멀티 스레드가 번갈아 실행되는 성질을 의미합니다. [병렬성]은 말 그대로 멀티 코어에서 각각의 스레드를 동시에 실행하는 성질을 의미하게 됩니다. 

 

즉, 싱글 코어에서는 멀티 스레드 작업이 실제로는 병렬로 실행되는 것은 아닙니다. 번갈아 작업하는 동시성 작업이 워낙 빨라서 사람에게는 병럴적으로 실행되는 것으로 보이는 것 뿐이죠.

 

결국 스레드의 수가 코어의 수보다 많아지게 되면, 결국 어떠한 방식으로든 스레드는 일정한 규칙에 따라 동시성으로 실행하게 됩니다. 이 때, 어떤 순서로 스레드를 실행할 것인지 결정할 필요가 있는데 이를 스레드 스케줄링이라고 합니다. 스레드 스케줄링에 따라 스레드들은 아주 짧은 시간에 번갈아가면서 그들의 run( ) 메서드를 조금씩 실행하게 됩니다. 

 

동시성과 병렬성의 차이를 다시 한번 되짚어보고 넘어가세요.