무지개곰
article thumbnail
반응형

프로그래밍을 공부하다 보면 꼭 듣게 되는 Blocking과 NonBlocking 그리고 Sync와 Async에 대하여 알아보겠습니다.

1. 목차

Blocking과 NonBlocking

Sync와 Async


2. Blocking과 NonBlocking

2.1. Blocking

Blocking은 작업이 진행 중일 때, 다른 작업은 앞의 작업이 끝나기를 기다려야 하는 방식을 의미합니다.

I/O작업이나 시간이 오래 걸리는 작업을 수행할 때, 앞의 작업이 끝난 후에 다음 작업을 시작하므로 자원이 효율적으로 사용되지 않을 수 있습니다.

예를 들어 '빨래하기', '청소기 돌리기', '빨래 널기' 3가지 작업을 순서대로 실행한다면 Blocking의 경우 빨래를 친구에게 부탁하고 빨래가 되는 동안 청소기를 돌리는 것이 아닌 세탁이 완료될 때까지 기다렸다가 완료가 된 후 청소기를 돌리고 빨래를 너는 순서로 일을 합니다.

Block 작업 방식


2.2. NonBlocking

NonBlocking은 작업이 진행 중일 때, 앞의 작업이 끝나기를 기다리지 않고 다른 작업도 동시에 실행하는 방식을 의미합니다.

시간이 오래 걸리는 작업을 끝날 때까지 기다리지 않고 다음 작업을 진행함으로써 자원을 효율적으로 활용할 수 있습니다. 복잡하지만 대규모 시스템의 경우 효율적으로 작업을 처리할 수 있어 대기시간을 최소화하여 빠른 응답시간을 제공할 수 있습니다.

예를 들어 위의 작업과 동일한 '빨래하기', '청소기 돌리기', '빨래 널기' 3가지의 작업을 순서대로 진행한다고 하면 NonBlocking의 경우 빨래를 시작한 후 빨래가 끝나기를 기다리는 것이 아닌 청소기를 돌리기 시작합니다. 청소기가 먼저 끝난 경우 빨래가 끝난 후 할 수 있는 작업인 빨래 널기를 요청합니다.

NonBlock 작업 방식


3. Sync와 Async

3.1. Sync

Snyc는 호출된 함수가 작업을 완료할 때까지 블로킹되는 방식을 의미합니다.

Block과 비슷하여 많이 헷갈리는 방식입니다. 제가 이해한 방식으로 설명을 드리자면 blocking과 마찬가지로 작업을 순차적으로 진행하되 앞의 작업이 끝나기를 기다리는 방식에서 차이가 있다고 이해하였습니다.

할 일이 '빨래하기', '청소기 돌리기', '빨래 널기' 3가지인 경우 Sync의 경우, 한 작업이 마무리된 후 혹은 작업의 시작과 끝이 동일한 경우를 의미합니다. 아래의 예시는 한 명이 한 작업씩 진행하였기에 Sync입니다. 만약 빨래와 청소기 돌리기 작업시간이 동일하게 소요된다면 나와 친구가 동시에 빨래와 청소기 돌리기를 시작하여 동시에 마무리된다면 Sync에 해당됩니다. 하지만 이런 경우는 거의 없는 것으로 알고 있습니다.

Sync 작업 방식


3.2. Async

Async는 호출된 함수가 작업을 완료하기를 기다리지 않고 즉시 반환하는 방식을 의미합니다.

NonBlocking과 많이 헷갈리는 방식입니다. 제가 이해한 방식으로 설명드리자면 Async는 작업의 시작과 끝이 같지 않고 작업 중간에 작업이 시작되어 자원을 효율적으로 사용하는 방법입니다.

할 일이 '빨래하기', '청소기 돌리기', '빨래 널기'3가지인 경우 친구는 빨래를 나는 청소를 하게 되었을 때 일을 동시에 시작하지 않아도 되어 친구가 먼저 빨래를 시작하였고 나는 빨래가 되어가는 중간에 청소를 시작합니다. 청소 도중 세탁기 작동이 끝나였고 친구는 잠시 쉬었다가 빨래를 널기 시작하였습니다. 이러한 식으로 작업의 시작과 끝이 동일하지 않은 경우를 Async라고 이해하였습니다.

반응형
profile

무지개곰

@무지개곰

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!