프로그래밍/의문
GPG 패킷 파싱 방법에 대한 흥미로운 스레드
제페
2016. 11. 6. 03:41
반응형
http://www.gpgstudy.com/forum/viewtopic.php?t=20746
작성자는 receive를 걸 때 버퍼의 최대치를 예약하고 임의의 갯수를 받는 방식으로,(온전한 패킷 완성에 1번 이상 receive)
작성자의 동료는 고정적인 헤더를 읽고, 바디를 읽는 방식으로(온전한 패킷 완성에 2번 receive) 구현을 했다.
여기서 작성자는, 동료의 방식이 성능적으로 비효율적이지 않느냐는 것.
인상적인 답글은
0. 네트워크 수신 버퍼는 어차피 소켓당 별도로 생성 되므로, 버퍼를 또 만들기(유저가 만드는 수신 큐) 보다는 네트워크 수신 버퍼를 이용하는 것이 낫다.
1. 네트워크 수신 버퍼는 파일 i/o가 아니다. 소켓 버퍼에 올려져있는 것을 가져오는 것 뿐이며, 유저 레벨이라 복사도 빠르다.
2. 네트워크 버퍼도 크기 제한이 있으니 오는 족족 빼는 것이 옳다.
3. 자기가 테스트를 해봤는데 header와 body를 따로 읽는 방식은 너무나도 느리더라
이다.
이 중 3번째를 말 한 사람은 왜 그토록 느리다고 했을까? 라고 생각해본다면.. 버퍼에서 가져오는 거 자체가 느리기보단, 완료에 대한 iocp 큐잉 과정에서 receive에 대한 완료 핸들러가 큐의 가장 뒷 단에 올려지게 되니 그것을 가져오기 까지의 시간이 느리다고 생각된 건 아닐지 생각을 해봤다.
반응형