Open kgh2120 opened 3 months ago
동기와 비동기는 해당 작업의 완료 여부에 따라 다음 작업을 수행하는지에 대해 차이를 갖고 있습니다. 동기와 같은 경우, 이전 작업이 완료되지 않으면 이후 작업을 수행하지 않는 방식입니다. 비동기는 이와 반대로 작업의 완료여부와 상관없이 다음 작업을 수행합니다. 블로킹과 논블로킹은, 해당 작업을 호출한 함수에게 제어권을 넘기느냐의 여부에 따라 구분하는 방식입니다. A 작업이 B 작업을 호출하고, B 작업이 완료될 때 까지 A 작업의 결괏값을 return하지 않고 기다리는 경우를 블로킹, 반대를 논블로킹이라고 합니다.
1. 동기이면서 논블로킹일 경우는 전체 프로그램의 실행흐름은 해당 작업을 호출할 경우 작업의 return이 나와 콜백함수를 호출할 때 까지 기다리므로 polling 작업과 같은 경우에 의미가 있습니다. 비동기이면서 블로킹인 경우는 의미가 없습니다. 2. I/O 멀티플렉싱은 여러 I/O 작업을 동시에 처리하기 위해 사용하는 기술로, 주로 여러 소켓을 동시에 모니터링하고 처리하기위해 사용됩니다. 3. 논블로킹 I/O의 경우, polling 방식으로 해당 I/O 작업의 결과를 계속해서 체크해줌으로써 완료되었을 때에 결과를 수신할 수 있습니다.
동기/비동기는 요청과 반환을 순서대로 처리하는지 아닌지의 차이가 있고 블로킹/논블로킹은 호출 시 제어권을 넘기는가 안 넘기는가의 차이가 있습니다. 동기는 요청 후 반환이 돌아와야 다음 요청을 보내는 방식이고 비동기는 요청을 보내고 반환이 돌아오지 않아도 다음 요청을 보낼 수 있습니다. 블로킹은 요청을 보내는 순간 제어권이 넘어가서 요청을 보낸 스레드는 반환을 기다리는 상태이고 논블로킹은 제어권을 가지고 있어 요청을 보낸 이후에도 쓰레드 내 다른 작업을 계속할 수 있음을 의미합니다.
1. 그렇다면, 동기이면서 논블로킹이고, 비동기이면서 블로킹인 경우는 의미가 있다고 할 수 있나요? 동기이면서 논블로킹인 경우는 요청을 보내고 제어권은 쓰레드 내에서 관리하여 다른 작업을 수행할 수 있기 때문에 의미가 있습니다. 이는 다운로드나 게임 내 맵 로딩과 같이 진행률을 보여줘야하는 경우 많이 사용됩니다. 반대로 비동기이면서 블로킹인 경우는 의미가 없다고 생각합니다. 제어권을 넘기고 해당 작업이 완료될 때까지 기존 쓰레드는 아무런 동작을 하지 못하는데 이는 동기 작업과 다른 것이 없기 때문입니다. 2. I/O 멀티플렉싱에 대해 설명해 주세요. I/O 멀티플렉싱은 하나의 소켓 내에서 여러 I/O 동작 처리를 수행하기 위한 방식입니다. 3. 논블로킹 I/O를 수행한다고 하면, 그 결과를 어떻게 수신할 수 있나요? JavaScript 기준으로 콜백함수를 사용한 결과 수신 방법이 있습니다.
동기와 비동기의 경우 작업의 진행 순차에 대한 차이를 가지고 있습니다. 동기의 경우 해당 작업이 끝난 후 다음 작업으로 넘어가지만, 비동기의 경우 병렬적으로 처리되어 작업이 끝나지 않더라도 다음 단계로 넘어갑니다. 블로킹 논 블로킹의 차이점은 함수 호출에 따른 제어권의 소유 차이입니다. 현재 작업이 블로킹 되거나, 안되거나의 차이가 있습니다.
- 그렇다면, 동기이면서 논블로킹이고, 비동기이면서 블로킹인 경우는 의미가 있다고 할 수 있나요? 동기이면서 논블로킹인 경우, 제어권을 원 함수에서 가지고 있기때문에 추가 작업이 가능하기 때문에 의미가 있지만, 비동기이면서 블로킹인 경우, 기존의 동기방식과 큰 차이가 없어지기 때문에 의미가 없습니다. - I/O 멀티플렉싱에 대해 설명해 주세요. 여러 입출력 스트림을 하나의 쓰레드나 프로세스로 동시에 처리할 수 있게 하는 기술입니다. - 논블로킹 I/O를 수행한다고 하면, 그 결과를 어떻게 수신할 수 있나요? polling 방식으로 주기적으로 완료가 되었는지 체크하거나, 콜백함수를 통해 완료여부를 체크합니다.
문제
예상 꼬리 질문
- 그렇다면, 동기이면서 논블로킹이고, 비동기이면서 블로킹인 경우는 의미가 있다고 할 수 있나요? - I/O 멀티플렉싱에 대해 설명해 주세요. - 논블로킹 I/O를 수행한다고 하면, 그 결과를 어떻게 수신할 수 있나요?들어가야 할 키워드 정리