Base/개념정리

싱글쓰레드와 멀티쓰레드, 동기와 비동기

findmypiece 2021. 4. 2. 22:15
728x90

개념이 자꾸 헷갈려서 정리해 놓는다.

싱글쓰레드 : 하나의 쓰레드로 일을 수행한다.

멀티쓰레드 : 다수의 쓰레드로 일을 수행한다.

동기 : 이전작업이 종료된 뒤에 다음 작업을 수행한다.

비동기 : 이전작업의 종료여부과 관계없이 다음 작업을 수행한다.

써놓고보니 더 헷갈린다.

싱글쓰레드==동기, 멀티쓰레드==비동기 같은데 다들 아니라고 한다.

싱글쓰레드도 내부작업은 비동기로 할 수 있고, 멀티쓰레드도 내부작업은 동기로 할 수 있다.

싱글쓰레드, 멀티쓰레드는 단순히 일을 하는 사람이 몇명인지로 구분하고

동기, 비동기는 실제로 일을 어떤식으로 처리하는지로 구분한다.

에초에 연관지어서 생각하면 안된다.

예를 내가 우체국 사장이라고 생각해보자.

아침에 우편배달을 업무를 시작하는데 집배원은 한명이라면 싱글쓰레드고, 여러명이라면 멀티쓰레드다.

그런데 각 집배원 중 어떤 사람은 등기만 담당하고 어떤 사람은 일반우편만 담당했다고 해보자.

등기우편만 배달하는 사람은 우편을 전해주고 수취확인도 해야 하기 때문에

다음배달을 하기까지 대기상태가 존재한다. 그렇기 때문에 동기 방식으로 일한다고 볼 수 있다.

일반우편만 배달하는 사람은 그냥 우체통에 꽂아놓고 바로 다음 일을 시작하기 때문에 대기상태가 없다.

그렇기 때문에 비동기 방식이라고 볼 수 있다.

당연한 얘기지만 비동기방식으로 처리하려면 각각 처리되는 각 작업들의 독립성이 보장되어야 한다.

공유된 자원은 에초에 건드리지 않게 설계하거나 건드려야 할 경우 그 부분은 적절히 블로킹하여

동기방식으로 처리되도록 해야 한다.

그리고 또 당연한 얘기지만 하나의 큰 작업을 임의의 나눠서 환경에서 비동기처리할 경우

나누어진 각 작업들의 작업량이나 시간이 비슷할때 최고의 효율을 낼 수 있다.

728x90