728x90
- 10-05 TCP의 입출력 루틴(Routine)분할
- 입출력 루틴 분할의 의미와 이점
- 지금까지 구현한 에코 클라이언트의 데이터 에코방식은 다음과같다
- 서버로 데이터를 전송한다. 그리고는 데이터가 에코되어 돌아올때까지 기다린다 무조건 기다린다 그리고 에코되어 돌아온 데이를 수신하고 나서야 비로소 데이터를 추가로 전송할 수 있다.
- 즉 한번 데이터를 전송하면 에코 되어 돌아오는 데이터를 수신할 때까지 마냥 기다려야 했다
- 기다림의 이유 : 프로그램 코드의 흐름이 read와 write를 반복하는 구조였기때문이다. 코드흐름의 분리를 못한 이유는 하나의 프로세스를 기반으로 프로그램이 동작했기 때문이다.
- 그러나 이제는 둘 이상의 프로세스를 생성할수 있으니 이를 바탕으로 데이터의 신과 수신을 분리해보자
- 분리를 위한모델은 다음과 같다. 에코클라이언트의 입출력 루틴 분리모델 이미지 참조
- 위 그림에서 보이듯이 클라이언트의 부모 프로세스는 데이터의 수신을 담당하고 별도로 생성된자식 프로세스는 데이터의 송신을 담당한다. 그리고 이렇게 구현해 놓으면 입력과 출력을 담당하는 프로세스가 각각 다르기 때문에 서버로부터의 데이터 수신여부에 상관없이 데이터를 전송할 수 있다.
- 이러한 구현방식을 택하는 이유에는 여러가지가 있지만 가장 중요한 이유는 프로그램의 구현이 한결 ㅜ월해 진다는데 있다.
- 여러분 입장에서는 프로세스를 하나 더 생성하는 방식인데 이것이 어떻게 보다 수월할 수 있겠느냐고 반문할 수 있다. 그러나 이러한 구현방식을 따르면 프로세스 생성 이후에 부모프로세스가 실행하는 영역은 데이터의수신과관련해서만 코드를 작성하면되고, 자식 프로세스가 실행하는 영역은 데이터의 송신과 관련해서만 코드를 작성하면 되기 때문에 코드의 구현이 보다 수월하다. 사실 하나의 프로세스 내에서데이터의송수신을 모두 진행하게끔 구현하려면 그만큼 신경 쓸 부분이 많아진다. 그리고 이러한 차이는 프로그램이 복잡할수록더 극명하게드러난다.
- 이것이 공식적으로 가장많이이야기하는 장점이다.
- 입출력루틴 분할의 또 다른 장점을 들라고 한다면 데이터 송수신이 잦은 프로그램의 성능향상을 들 수 있다. 이에 대한 이해를 위해 다음 그림을보자( 그림 10-6 데이터 송수신 방법의 비교)
위 그의 왼쪽은 이전 에코 클라이언트의 데이터 송수신방식을 그리고 오쪽은 입출 루틴을 분리시킨 에코 클라이언트의 데이터 송수신 방식을 보여준다. 일단 서버에서의 차이는 없다. 차이가 나는 부분은 클라이언트 영역이다. 입출력 루틴이분리된 클라이언트는 데이터의 수신여부에 상관없이 데이터전송이 가능하기 때문에 연속해서 데이터의 전송이 가능하다 따라서 동일한 시간 내에서의 데이터 송수신 분량이 상대적으로 많을 수 밖에 없다. 그리고이러한 성능적 차이는 데이터의 전송속도가 느린 환경에서 더 확실히 드러난다.
- 사실 에코 클라이언트에서 입출력 루틴을 분리할 필요는 없다.
- 사실 에코 클라이언트는 입출력 루틴을 분리시킬만한 특별한 근거를 지니고 있지 않다. 오히려 입출력 루틴의 분리로 인해서 더 복잡하게만 느껴질 수 있다. 다만 입출력 루틴의 분리를 설명하기 위한 대상으로 에코 클라이언트를 삼았을 뿐이니 이 부분에대해 오해 없기 바란다.
728x90
'책 > 윤성우 TCPIP' 카테고리의 다른 글
11-01 프로세스간 통신의 기본 개념 (1) (0) | 2020.12.24 |
---|---|
10-05 TCP의 입출력 루틴(Routine)분할 (2) (0) | 2020.12.23 |
10-04 멀티태스킹 기반의 다중접속 서버(2) (0) | 2020.12.21 |
10-03 : 시그널 핸들링 (3) ~ 10-04 멀티태스킹 기반의 다중접속 서버(1) (0) | 2020.12.20 |
10-03 : 시그널 핸들링 (2) (0) | 2020.12.19 |