4월18일-동기와 비동기

Yullgiii·2024년 4월 18일
0
post-thumbnail

동기와 비동기, 블로킹과 논블로킹 차이

동기(Synchronous)와 비동기(Asynchronous)

  • 동기(Synchronous): 동기 방식에서는 작업을 요청하고 그 결과가 완료될 때까지 기다린다. 요청과 결과가 시간적으로 연결되어 있어, 하나의 작업이 완료된 후 다음 작업이 실행된다.
  • 비동기(Asynchronous): 비동기 방식에서는 작업을 요청한 후 결과와 상관 없이 바로 다음 작업을 수행한다. 작업의 완료와 결과 처리는 콜백 함수나 이벤트, 프로미스 등을 통해 비동기적으로 처리된다.

블로킹(Blocking)과 논블로킹(Non-blocking)

  • 블로킹(Blocking): 블로킹 호출은 호출된 함수가 작업을 완료할 때까지 제어권을 반환하지 않는다. 이는 다른 작업을 하지 못하고 대기해야 한다는 의미이다.
  • 논블로킹(Non-blocking): 논블로킹 호출은 호출된 함수가 바로 제어권을 반환하며, 작업의 완료 여부와 상관 없이 즉시 다음 작업을 수행할 수 있다.

동기이면서 논블로킹, 비동기이면서 블로킹의 경우

  • 동기이면서 논블로킹: 이 조합은 흔치 않다. 동기는 요청과 그 처리가 완료될 때까지 대기하는 특성 때문에 블로킹과 자주 연관된다. 그러나 특정 구현에서는 폴링(Polling) 방식으로 동기적인 작업을 논블로킹으로 처리할 수 있다.
  • 비동기이면서 블로킹: 이것은 가능하지만 일반적인 경우는 아니다. 예를 들어, 메인 스레드가 아닌 다른 스레드에서 비동기 작업을 시작하고, 해당 스레드가 결과를 기다리는 동안 블로킹되는 상황을 생각할 수 있다.

I/O 멀티플렉싱(I/O Multiplexing)

I/O 멀티플렉싱은 하나의 스레드나 프로세스가 여러 I/O 작업을 효율적으로 관리할 수 있도록 하는 기술이다. select, poll, epoll과 같은 시스템 호출을 사용하여, 여러 I/O 소스(네트워크 소켓, 파일 디스크립터 등)를 동시에 모니터링하며, 어떤 I/O에서 데이터가 준비되었는지 확인하고 처리한다. 이 방식은 효율적인 리소스 사용과 더 높은 성능을 가능하게 한다.

논블로킹 I/O 수신 방법

논블로킹 I/O에서 데이터를 수신하는 방법은 주로 이벤트 루프나 콜백 메커니즘을 통해 이루어진다. 예를 들어, Node.js에서는 이벤트 루프와 콜백을 사용하여 논블로킹 I/O 작업을 처리한다. 작업이 시작된 후, I/O 작업이 완료되면 이벤트 루프가 해당 이벤트를 감지하고 미리 등록된 콜백 함수를 호출하여 결과를 처리한다.

이러한 설명은 동기와 비동기, 블로킹과 논블로킹의 개념을 명확히 하고, 각각의 접근 방식이 어떻게 컴퓨팅 환경에서 사용되는지를 이해하는 데 도움이 된다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글