글 작성자: 택시 운전사
반응형

Simplified matrix of basic Linux I/O models


해당 주제 관한 가장 유명한 표입니다. x축, y축의 각각의 의미를 알아보고 둘의 조합에 해당하는 예시를 이용해서 이해를 해보겠습니다.

Blocking / Non-blocking

Blocking / Non-blocking호출된 함수가 바로 return을 하는 지 마는 지가 관심사입니다.

Blocking I/O Model

  • 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 제어권을 바로 돌려주지 않으면 Blocking입니다.
  • Wait Queue에 들어갑니다.

Non-blocking I/O Model

  • 호출된 함수가 자신이 할 일을 채 마치지 않았더라도 바로 return해서 제어권을 건내주어 호출한 함수가 다른 일을 진행할 수 있도록 해주면 Non-blocking입니다.
  • Wait Queue에 들어가지 않는다.

Synchronous / Asynchronous

Synchronous / Asynchronous호출된 함수의 함수 작업 완료 여부를 누가 신경쓰는 지가 관심사입니다.

Synchronous

  • 호출된 함수호출된 함수의 작업 완료 후 return을 기다리거나, 또는 호출된 함수로부터 바로 return 받더라도 작업 완료 여부를 호출된 함수가 스스로 계속 확인하며 신경쓰면 Synchronous입니다.

Asynchronous

  • 호출된 함수에게 callback function을 전달해서, 호출된 함수의 작업이 완료되면 호출된 함수가 전달받은 callback function을 실행하고, 호출된 함수가 작업 완료 여부를 신경쓰지 않으면 Asynchronous입니다.

Synchronous - Blocking

호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지면서, 작업 완료 여부를 호출된 함수가 스스로 계속 확인하는 방식입니다.

  • file.read()
  • file.write()

Asynchronous - Non-blocking

호출된 함수가 바로 return을 해서 제어권을 건내주어 호출한 함수가 다른 일을 진행할 수 있도록 해주고, 호출된 함수에게 callback function을 전달해서, 호출된 함수가 작업 완료 여부를 신경쓰지 않는 방식입니다.

  • Node.js

Synchronous - Non-blocking

호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지면서 호출된 함수에게 callback function을 전달해서, 호출된 함수가 작업 완료 여부를 신경쓰지 않는 방식입니다.

Asynchronous - Blocking

호출된 함수가 바로 return을 해서 제어권을 건내주어 호출한 함수가 다른 일을 진행할 수 있도록 해주고 작업 완료 여부를 호출된 함수가 스스로 계속 확인하는 방식입니다.

  • Node.js + mySQL

References

반응형