라벨이 blocking인 게시물 표시

[dev] 싱크, 어싱크, 블로킹, 논블로킹을 정확하게 모르는 사람을 위한 글

이미지
블로킹 논블로킹 싱크, 어싱크, 블로킹, 논블로킹을 정확하게 모르는 사람은 바로 저 입니다. Synchronous VS Asynchronous 한국어로 동기와 비동기입니다. 동기는 2개의 작업이 있을 때, 첫 번째 작업의 종료시점과 두 번째 작업의 시작시점이 닿아있으면 sync 입니다. 보통 함수를 연달아 호출했을 때 순차적으로 출력이 된다면 Synchronous한 작업입니다. 비동기는 동기와 반대로 작업의 시간을 맞추지 않는 것 이죠. blocking VS non-blocking 기술 적으로 구분이 되며 함수의 호출을 생각하면 이해가 빠르기 때문에 함수호출로 설명하겠습니다. 볼로킹은 어떤 함수가 호출되고 작업이 끝날 때까지 반환값을 넘겨주지 않는 것을 블로킹 되었다고합니다. 논블로킹은 어떤 함수가 호출되고 작업이 요청된다음 반환값을 넘겨주면 논 블로킹 되었고합니다. 블로킹/동기, 블로킹/비동기, 논블로킹/동기, 논블로킹/비동기 이렇게 4개의 조합이 있을 수 있습니다. 언제쓰이고 어떻게 써야하는지 정리해보겠습니다. 블로킹/동기 예를 들어보겠습니다. 카페에서 손님이 줄을 서 있습니다. 1번, 2번, 3번. 캐셔가 주문을 받습니다. 1번손님 아메리카노 4잔. 캐셔가 주문을 받고 커피를 내립니다. 1번손님을 포함한 모든 손님은 기다립니다.(블로킹상태) 캐셔는 작업이 완료되면 1번손님에게 커피를 전달합니다. 1번 손님은 커피를 받아 카페에서 일을 시작합니다.(동기) 2번손님, 3번손님 순서대로 주문을 받아 전달을 합니다. 2번, 3번은 1번의 음료를 만들 때 아무것도 하지 못하고 기다리고 있습니다. 음료는 순서대로 나옵니다. 블로킹/비동기 예를 들어보겠습니다. 카페에서 손님이 줄을 서 있습니다. 1번, 2번, 3번. 캐셔(B작업)가 주문을 받습니다. 1번손님(A작업) 아메리카노 4잔. 캐서는 1번손님에게 자리에 앉아 일하고 계시면 불러주겠다고 합니다. 1번