multi-threaded?

신명철·2022년 7월 26일
0

etc

목록 보기
5/5

들어가기 전

multithread의 instruction 처리에 대해서 concurrency 인지 parallel 인지에 대해 명확한 이해가 없었다. multithread 이면 단순히 parallel(병렬적)하게 instruction을 처리한다고 생각했다.
문득 생각해보니 processor가 하나면 결국 instruction을 처리하는 주체가 하나인데 어떻게 thread가 여러개가 있다고 parallel하게 명령어를 처리할 수 있는지에 의문이 생겼고 그 의문을 해결하고자 한다.

concurrency & parallel

multithreading을 알아보기에 앞서 concurrency와 parallel에 대해서 정확하게 짚고 넘어가야 한다.

concurrency

Oxford Dictionary에 따르면 concurrency란, 같은 시간에 두개 이상의 일을 하는 것이라고 한다. 하지만 parallelconcurrency를 구분하기에는 조금 모호하다. concurrency에 대해 이해하기 위해 다음 그림을 참조하자.


CPU는 한번에 하나의 task밖에 처리하지 못한다. 즉, concurrency라는 것은 여러 개의 thread를 빠른 속도로 번갈아가며 CPU를 할당하는 것을 뜻한다. 그래서 완전히 parallel하게 처리하는 것은 아니지만, 거의 parallel 하게 처리하는 것처럼 보인다.

parallelism

parallelism은 다수의 processor 가 여러 개의 processes 들을 동시에 처리하는 것을 말한다. parallel programming을 위해서는 병렬 처리에 특화된 프로그래밍을 사용해야 한다.

Parallel Processing
task를 나눠서 최소한의 시간에 처리할 수 있도록 2개 혹은 그 이상의 CPU들이 하나의 task를 분리시켜서 처리한다. 다수의 tasks들은 parallel processing sys 에서 concurrently하게 처리된다.

single processor 에서의 multithreaded programming

흔히 multithreading은 single processor에서도 parallel하게 처리한다는 환상을 느끼기도 한다. 하지만, single processor에서의 thread들은 스케줄링 알고리즘에 의해서 switching 하며 작업을 처리한다. 혹은, time out 이나 interrupt 같은 외부적인 요인도 같이 작용한다.

즉, parallel하게 명령어를 처리하는게 아니라, 시분할을 통해 concurrency하게 명령어를 처리하는 것이다.

multiple processor에서의 multithread programming

multiple processor에서의 multithread는 완전히 병렬적(parallel)으로 작동한다. single processor에서의 multithreading은 한번에 하나의 thread만 동작하지만, multiple processor에서는 독립적인 여러 개의 processor들이 동시에 동작하며 task들을 해결한다.


출처

profile
내 머릿속 지우개

0개의 댓글