LISTORY

[윈도우즈 시스템 프로그래밍] 비동기 I/O와 APP 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 비동기 I/O와 APP

LiStoryTeller 2018. 11. 18. 15:55

 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 YouTube 강의 정리이다.


오늘 정리할 부분은 비동기 I/O와 APP 파트이다.


YouTube 주소 : 비동기 I/O와 APP



비동기 I/O와 APP


비동기 I/O 에 대해 공부하기 앞서 I/O와 CPU 클럭의 관계에 대해 알아보겠다.



I/O와 CPU 클럭의 관계


일반적으로 CPU 클럭이 높아지면, 높은 퍼포머스를 보여준다. I/O도 일반적으로 클럭 속도가 빠르면 빨리진다.


하지만 실제 I/O는 CPU 클럭과는 별도로 BUS 클럭에 의존도가 높다. 


보편적으로 시스템 디자인 시, CPU 클럭이 높으면 그만큼 I/O 클럭(bus 클럭)이 높은것이 일반적이다.


그렇다면 I/O 클럭을 포함하는 CPU클럭, 즉, 시스템 클럭이 I/O와 어떤 관계를 갖을까?



예를들어 보겠다. A, B 두개의 시스템이 있다.


A라는 시스템의 목적지가 있다. A는 생성된 데이터를 가공하여 목적지로 보낸다.


B라는 시스템도 마찬가지이다. 생성된 데이터를 가공하여 목적지로 보낸다.


중요한 것은 A의 클럭은 100이고 B는 200이다.


클럭이 높으면 I/O가 빠를거라고 생각하지만 꼭 그렇지는 않다.


물론 보편적으로 시스템 클럭이 높으면 I/O클럭도 빠르긴하다.


보통 I/O를 한다고 하면 대상이 파일이건 아니면 네트워크이건 무엇이건 버퍼링이라는 것을 한다.


버퍼링을 한다는 것은 버퍼가 있다는 뜻이다.


버퍼를 둔 이유는 데이터를 한번에 모아서 보내면 더 빠른 시간에 많은 것을 보낼 수 있기 때문이다.


다시 예제로 들어와서 A, B 시스템 모두 버퍼가 있다고 해보자 


버퍼를 비우는 정책은 프로그래머가 결정할 수 있다.


예를 들어 10클럭에 한번씩 버퍼가 비워진다고 가정해보자.


B는 200 클럭으로 작동한다. 그렇다면 10 클럭에 한번씩 FLUSH가 된다는 것은 1초에 20번 비워진다는 것이고


A는 1초에 10번 비워진다는 것이다.


그럼 실제로 데이터를 만들어내는 속도가 B가 더 빠르겠지만, 같다고 가정하겠다. 데이터는 a, b, c가 만들어진다.


그럼 A는 a, b, c 데이터를 모아서 묶어서 한번에 보내고,


B의 경우에는 a 생성 시 보내고, b 생성하면 보내고, c 생성하면 보내는 식으로 데이터를 보내게 될 것이다.


여기서 문제가 발생한다.


TCP/IP에서는 한번 데이터를 보내면 ACK 를 보내는 등, 보낸 데이터에 대한 검증을 받는다. 즉, 양방향 통신을 한다.


A는 이는 한번만 핸들링하면 되는데 B는 세번을 해야하는 것이다.


I/O 같은 경우에는 CPU에 비해 훨씬 느린 환경이다. 파일에 비해서도 느리다.


B가 300클럭으로 작동한다 해도, 목적지가 로컬 시스템이 아닌 외부의 다른 시스템일 경우에


이 프로토콜을 여러번 사용한다는 것은 상당한 부담이다.


아무리 클럭속도가 빠르다 하더라도 네트워크 상에 연결된 두개의 시스템이 통신하는 시간은 줄일 수 없다.


그러므로 A가 B보다 3배의 속도를 내기도 한다.


I/O 연산이 묶이게 될 경우에는 CPU 클럭이 차지하는 영역은 상당히 작다.


버퍼를  비우는 정책은 상당히 중요하다.


즉, I/O는 독립적인 영역으로 볼 정도로 따로 봐야하는 면이 굉장히 많다.








Comments