[CS] 28) Blocking/Non Blocking I/O

songh·2024년 3월 10일
0

CS지식

목록 보기
29/35
post-thumbnail

I/O가 성능에 미치는 영향

I/O란 데이터 입출력을 말하는 것으로, 디바이스를 통해 입력과 출력이 이뤄지는 작업을 모두 I/O라고 한다. 네트워크를 통해 다른 서버로 데이터를 전송하거나 다른 서버로부터 데이터를 전송받는 것도 I/O에 포함된다.

I/O에서 발생하는 시간은 CPU를 사용하는 시간과 대기시간 중 대기시간에 속하므로 I/O가 많아진다는 건 애플리케이션 연산까지 CPU가 아무것도 못하고 대기하는 시간이 길어진다는 의미고 애플리케이션 속도가 함께 느려진다. 따라서 높은 성능을 보장해야하는 어플리케이션 입장에서는 I/O는 장애물이 될 수 있다. 또 I/O로 인한 블록킹은 CPU를 긴 시간동안 IDLE하게 두므로 다른 작업을 할 수 있음에도 오랫동안 다른 작업을 할 수 없어서 매우 비효율적이다.

blocking I/O

가장 기본적인 I/O모델로, 리눅스에서 모든 소켓통신은 기본 블록킹으로 동작한다. I/O작업이 진행되는 동안 유저 프로세스가 자신의 작업을 중단한 채 I/O작업이 마칠때까지 대기하는 방식이다.

커널에 read I/O를 요청하면 시스템 콜로 제어권이 커널로 넘어가고 read가 끝날때까지 application block이 되서 다른 작업을 못하게 된다. read I/O가 수행될때까지 어플리케이션이 다른 작업을 수행하지 못함을 의미한다.

non blocking I/O

위의 블록킹 방식의 비효율성을 극복하고자 도입된 방식이다.

read I/O를 요청하면 시스템 콜로 커널의 I/O 작업완료 여부와는 무관하게 즉시 응답한다. 커널이 시스템 콜을 받자마자 CPU 제어권을 다시 어플리케이션에게 넘겨주고 따라서 어플리케이션은 I/O작업이 완료되기 전 다른 작업을 수행할 수 있다. 다른 작업을 수행하면서 중간중간 시스템 콜을 보내서, I/O가 완료되었는지 아닌지를 커널에게 물어보고 완료되면 I/O작업을 완료한다.

0개의 댓글

관련 채용 정보