[CS] 27) 동기와 비동기 & 블로킹과 논블로킹

songh·2024년 3월 10일
0

CS지식

목록 보기
28/35
post-thumbnail

동기와 비동기

Synchronous는 요청한 작업에 대해 완료여부를 따져 순차적으로 처리하는 것을 말한다. Asynchronous는 요청한 작업에 대해 완료여부를 따지지 않고 자신의 다음 작업을 수행하게 된다.

비동기 성능의 이점

비동기 특징을 이용해 성능과 연관지어 말한다. 이유는 요청한 작업에 대해 완료여부를 따지지 않고 자신의 그다음 작업을 수행하므로, I/O 작업처럼 느린 작업을 할때 기다리지 않고 다른 작업을 처리하면 동시에 처리해서 멀티작업을 진행할 수 있기 때문이다. 이는 전체적인 시스템 향상에 도움을 줄 수 있다.

작업순서처리의 차이

동기작업은 요청한 작업에 대해 순서가 지켜지는 것을 말하고, 비동기 작업은 순서가 지켜지지 않을 수 있다. 동기작업의 경우를 살펴보면, 요청한 작업에 대해 완료알림을 반드시 받아야만 다음 작업을 수행한다는 말은 곧 작업을 순서대로 처리한다는 말이기 때문이다.

따라서 동기는 A함수가 B함수를 호출할때, B함수 결과값을 직접 받아서 A함수가 처리하는 것이다. 호출한 A함수가 B함수의 자겁완료를 신경쓴다.
따라서 비동기는 A함수가 B함수를 호출할때, B함수의 결과를 B함수가 처리하는 것(callback)이다. 즉 호출된 함수(callback함수)가 작업완료를 신경쓴다.


블록킹과 논블록킹

동기와 비동기가 전체적인 작업에 대한 순차적인 흐름유무라면, 블록킹과 논블록킹은 전체적인 작업의 흐름 자체를 막냐와 안막냐로 볼 수 있다. 예로, 파일을 읽는 작업이라면 블록킹 방식으로 읽으면, 파일을 다 읽을때까지 대기하고, 논블록킹방식이면 파일을 다 읽지 않아도 다른 작업을 할 수 있다.

제어권?

제어권은 간단히 말해서 함수의 코드나 프로세스 실행흐름을 제어할 수 있는 권리같은 것이라고 생각하자. 블록킹과 논블록킹은 호출을 실행한 함수가 호출한 함수에게 제어권을 바로 주느냐와 안주느냐로 구분된다. 제어권이 호출한 함수에게 넘어가버리면 해당 스레드는 블록킹된다.

따라서 블록킹은 A함수가 B함수 호출시, B함수가 자신의 작업이 종료되기 전까지 A함수에게 제어권을 돌려주지 않는 것을 말한다. 요청한 작업을 마칠때까지 계속 대기
따라서 논블록킹은 A함수가 B함수를 호출할때, B함수가 제어권을 바로 A함수에게 넘겨주면서 A함수가 다른 일을 할 수 있도록 하는 것이다. 요청 작업을 즉시 마칠 수 없다면 즉시 return

▶️ A함수가 B함수를 블록킹 방식으로 호출할 경우 제어권 상태를 나타낸 그림

▶️ A함수가 B함수를 논블록킹 방식으로 호출할 경우 제어권 상태를 나타낸 그림


동기/비동기 + 블록킹/논블록킹 종류

Synchronous + Blocking & Asynchronous + NonBlocking

Sync-Blocking : 결과가 처리되어 나올때까지 기다렸다가 return값으로 결과를 전달
Async-Blocking : 작업요청을 받아 별도 프로세서에서 진행하게 하고 바로 return. 결과는 별도 작업 후 간접적(callback)으로 전달한다.

Synchronous + NonBlocking

B함수가 바로 제어권을 돌려주므로, A함수는 다른 작업을 수행할 수 있으나 언제 B함수가 종료되는지 알 수 없다. 하지만 B함수의 종료를 A함수가 처리해야한다.
A함수가 직접 결과를 처리해야하는 상황이므로, B함수의 종료를 반복적으로 물어봐야 하는 경우이다.

Asynchronous + Blocking

호출하고 기다리지만 blocking에 의해 다른 일은 하지 못하고 대기하며, 완료된 이후에 callback을 호출하게 된다. 가장 비효율적인 모델이다.

0개의 댓글

관련 채용 정보