-
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에 대한 완료 핸들러가 큐의 가장 뒷 단에 올려지게 되니 그것을 가져오기 까지의 시간이 느리다고 생각된 건 아닐지 생각을 해봤다.
반응형'프로그래밍 > 의문' 카테고리의 다른 글
tinyint는 2바이트의 공간에 1바이트만을 사용하는 식으로 동작한다. (0) 2017.02.06 c#으로 ADOX.Create 시 클래스가 등록되지 않았습니다 예외 해결 (2) 2017.02.01 utf-8 파일 처리 중 bom으로 인한 출력 오류 (0) 2016.10.11 [c++] 람다 캡쳐 시 캡쳐된 값은 어디에 생성되는가 (0) 2016.08.17 비쥬얼 스튜디오에 tcmalloc 간단 적용 (0) 2016.07.22