동기/비동기는 전체적인 작업의 순차적인 흐름의 유무이며 리턴값을 계속 기다리느냐에 대한 개념인 반면 블로킹/넌블로킹은 다른 요청의 작업을 처리하기 위해 현재 작업을 대기시키냐 안시키냐의 유무이며 제어권에 관한 개념이다.
동기와 비동기의 차이점은 무엇인가요?
동기는 작업을 동시에 수행하거나 동시에 끝나거나 끝나는 동시에 시작한다. 요청한 작업에 대한 완료 여부를 따져 순차대로 처리한다. 요청하면 시간이 얼마나 걸리든 상관없이 요청한 자리에서 결과가 주어져야한다. 간단하고 직관적인 개념이진만 결과를 받을 때까지 기다려야 한다는 단점이 있다. 반면 비동기는 시작/종료가 일치하지 않으며 끝나는 동시에 시작하지 않는다. 요청한 작업에 대해 완료 여부를 따지지 않는다. 즉, 순서가 지켜지지 않을 수 있다. 비동기의 경우에는 느린 작업이 발생할 때 기다리지 않고 다른 작업을 처리하면서 동시에 처리하는 멀티 작업을 진행할 수 있기에 전반적인 시스템 성능이 향상될 수 있다.
동기+블로킹, 동기+넌블로킹, 비동기+블로킹, 비동기+넌블로킹 과 같은 네 가지 상황에서 어떤 조합이 가장 효율적이라고 할 수 있는지, 그 이유는 무엇인지 설명해주세요.
비동기 + 넌블로킹 조합이 효율적이라고 생각한다. 작업이 완료될 때까지 기다리지 않기 때문에, 시스템의 응답성이 높아지고 다수의 작업을 병렬적으로 처리할 수 있기 때문이다.
동기/비동기는 전체적인 작업의 순차적인 흐름의 유무로 리턴값을 계속 기다리느냐에 대한 개념입니다. 동기는 작업 완료를 기다리고 비동기는 기다리지 않고 다음 작업을 수행합니다. 블로킹/넌블로킹은 다른 요청의 작업을 처리하기 위해 현재 작업의 대기 유무를 나타내는 제어 방식입니다. 블로킹은 작업이 실행 요청을 받아 실행하는 동안 다른 작업을 진행하지 못하고 대기하며 넌블로킹은 이미 특정 작업을 수행하고 있어도 멈추지 않고 다른 작업을 수행합니다.
동기는 시작/종료가 일치하여 동시에 수행하고 비동기는 일치하지 않아 동시에 시작하지 않습니다. 동기는 요청한 작업에 대해 완료 여부를 따져 순차적으로 처리하는 반면 비동기는 완료 여부를 따지지 않아 순서가 지켜지지 않을 수 있습니다. 동기는 요청을 하면 시간과 상관 없이 요청한 자리에서 결과가 주어지고 비동기는 요청한 자리에서 결과가 주어지지 않습니다.
비동기+넌블로킹 상황이 가장 효율적입니다. 비동기+넌블로킹 상황은 호출한 함수가 호출된 함수의 작업 완료 여부와 상관없이 기다리지 않고 자신의 작업을 진행하여 시스템 자원을 최대한 활용하면서 작업을 병렬 처리할 수 있습니다.
비동기/동기는 '응답 대기'를 기준으로 분류하고, 넌블록킹/블록킹은 '작업 중단'을 기준으로 분류합니다.
동기는 응답을 기다리고 비동기는 응답을 기다리지 않습니다.
특정 상황이 효율적이라고 콕 집어 말할 수 없습니다.
자원과 요구사항에 따라 달라집니다.
지금상황에 특정응답의 결과에 따라 데이터의 정합성이 걸려있다면 (금융권 | 결제시스템)등 속도가 느리더라도 반드시 동기 / 논블로킹 혹은 동기/ 블로킹을 사용해야합니다.
속도를 높여서 블로킹을 해결하려면 돈을 더 써서 컴퓨팅파워를 늘리는 방식으로 있을것같습니다.
동기(Synchronous)와 비동기(Asynchronous)의 차이점 : 동기 방식은 요청한 작업이 끝나야 다음 작업으로 넘어갈 수 있는데, 비동기 작업은 작업 완료 여부와 상관없이 다음 작업으로 넘어간다.
블로깅 방식에선 현재 작업이 완료되기 전까지 아무런 작업도 할 수 없지만, 넌블로킹 방식에선 작업이 완료되지 않더라도 호출한 측이 다른 작업을 수행할 수 있다.
일반적으로는 비동기 + 넌블로킹 조합이 가장 효율적이다. 이 조합이 시스템 자원을 최대로 활용할 수 있기 떄문이다. 비동기적으로 작업을 요청한 후, 결과를 기다리지 않고 다른 작업을 수행할 수 있기 때문에, CPU 와 같은 자원이 유후 상태로 남아있지 않으며, I/O 작업의 지연에 의해 전체 시스템 성능이 저하되지 않는다.
예상 면접 질문