보글보글 개발일지
article thumbnail
반응형

영상 제목

block I/O vs non-block I/O 개념을 설명합니다! 소켓 I/O를 예제로 주로 설명해요! I/O multiplexing(다중 입출력) 설명도 빠질 수 없겠죠? ;)

영상 링크

https://www.youtube.com/watch?v=mb-QHxVfmcs 

영상 요약

I/O에 관하여

  • I/O : 데이터의 입출력
  • I/O의 종류: network(socket), file, pipe, device

Socket이란?

  • 소켓: 네트워크 통신은 socket을 통해 데이터가 입출력된다.
  • 백엔드 서버: 네트워크 상의 클라이언트들과 각각 소켓을 열고 통신

OS 레벨에서 Block I/O 동작 원리

  • Block I/O: I/O 작업을 요청한 프로세스/스레드는 요청이 완료될 때까지 블락됨

  • non-block I/O: 프로세스/스레드를 블락시키지 않고 요청에 대한 현재 상태를 즉시 리턴 - 스레드가 다른 작업을 수행할 수 있다.

  • non-block I/O 이슈: I/O 작업 완료를 어떻게 확인할 것인가?
    • non-block I/O 결과 처리 방식
      • 1. 완료됐는지 반복적으로 확인 - 완료된 시간, 완료 확인한 시간 차이 커서 처리 속도 느려질 수 있음/ 반복적 확인은 CPU낭비로 이어질 수 있음
      • 2. I/O multiplexing 사용 (다중 입출력): 관심있는 I/O 작업들을 동시에 모니터링 하고 그 중에 완료된 I/O 작업들을 한번에 알려줌 - 네트워크 통신에 많이 사용
        • 종류: select, poll, epoll, kqueue, IOCP(I/O completion port)
        • 앞에 두개는 잘 안쓰임
        • Linux epoll
      • 3. callback / signal
        • POSIX AIO
        • LINUX AIO
        • 널리 사용되지는 않음
      • 4. io_uring...
    • 핵심: non-block I/O를 통해 I/O 요청 완료 전에도 다른 일을 할 수 있음
반응형
profile

보글보글 개발일지

@보글

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