일반적으로 블로킹 및 비 블로킹 Winsock TCP 소켓에는 속도 또는 성능 차이가 있습니까? 두 소켓의 차이점을 얻을 수는 있지만 두 가지 유형 간의 자세한 성능 비교는 없습니다.블로킹 및 비 블로킹 winsock의 속도/성능 특성
답변
속도가 아니므로. write
및 read
작업은 메모리 복사 위장입니다. 커널에서 데이터를 복사하는 것뿐입니다. 나는. 그들은 실제로 아무 것도 보내거나받지 않습니다.
블로킹 블로킹 기능과 비 블로킹 기능이 묻습니다 : 완료 될 때까지 차단하거나 -1을 반환하고 즉시 수행 할 수없는 경우 EAGAIN
을 반환 하시겠습니까? 예를 들어 소켓에서 읽었지만 수신 버퍼에는 아무것도 없다. 뭔가가 올 때까지 recv
을 걸고 싶거나 -을 돌려 주시겠습니까?
깨달음에 감사드립니다. –
IOCP에서는 사용자 버퍼 포인터 배열이 WSASend/WSARecv 호출로 커널에 전달되는 방식으로 상당히 위장되어 있습니다. 여전히 데이터 이동이 있지만, NIC 하드웨어 버퍼가 사용자 공간 버퍼에 직접 DMA 될 수 있다고 생각합니다. 한 수준의 비참한 복사를 차단합니다. –
내 경험에 비 블로킹 winsock 작업은 약간 느리지 만 훨씬 더 확장 가능합니다. 실제로 블로킹 I/O (IOCP 사용)를 수행 할 때 응용 프로그램 수준에서 2 회의 시스템 호출과 함께 플 래시 호출을 수행하고 블로킹 I/O를 사용하는 경우 하나의 시스템 호출을 수행해야합니다. 동시 연결이 많은 경우 논 블로킹 I/O가 잘 구현되면 확장 성이 뛰어난 아키텍처로 인해 훨씬 빠릅니다.
데이터를 최대 대역폭으로 지점 간 전송해야하는 경우 블로킹 I/O를 사용하십시오. 많은 동시 클라이언트 연결을 처리해야하는 경우 - 비 차단 I/O를 사용하십시오. 그들 중 누구에게도 너무 기대하지 마십시오.
일반적으로 이것은 "이벤트 블로킹 vs 쓰레드"서버 아키텍처에 대한 것이고 "블로킹 대 비 블로킹"입니다. 어떤 상황에서도 사용할 수있는 범용 서버 아키텍처는 없습니다. 그것은 응용 프로그램에 따라 다릅니다.
- 1. 파이썬의 epoll 및 비 블로킹
- 2. 비 블로킹 소켓 및 io
- 3. NIO 비 블로킹 모드
- 4. 비 블로킹 소켓
- 5. pyzmq 비 블로킹 소켓
- 6. 비 블로킹 동시 수집?
- 7. 비 블로킹 소켓
- 8. 레일 비 블로킹 포스트
- 9. C# 비 블로킹 Socket.Connect()
- 10. 네트워킹 블로킹 비 블로킹, 스레드 만 옵션으로 사용 하시겠습니까?
- 11. 파이어 폭스 비 블로킹 타이머
- 12. 비 블로킹 UI WPF/Silverlight
- 13. 비 블로킹 배치 파일을 실행
- 14. 비 블로킹 소켓에 sendfile() 완료
- 15. Dialog.show()는 비 블로킹 방법입니까?
- 16. Java 소켓 비 블로킹 읽기
- 17. ESI가 블로킹 또는 비 블로킹입니까?
- 18. 비 블로킹 SocketChanel에서 정보 읽기
- 19. UIGestureRecognizer 블로킹 테이블 뷰 블로킹
- 20. C# 스레딩 및 블로킹
- 21. 블로킹과 비 블로킹, 비동기 블로킹의 차이점은 무엇입니까?
- 22. Python에서 블로킹 대 블로킹 네트워크 IO
- 23. 비 블로킹 소켓에서 보내기 작업이 완료되면?
- 24. 여러 MPI 비 블로킹 전송을 전송 - 그것은
- 25. 자바의 비 블로킹 소켓에 객체를 직렬화하려면 어떻게해야합니까?
- 26. 토네이도 (비 블로킹) VS Flask (WSGI)
- 27. 블로킹 WM_QUIT
- 28. 시리얼 포트 비동기 읽기 (비 블로킹) + 쓰레드
- 29. 스칼라에서 비 블로킹 방법을 만드는 방법은 무엇입니까?
나는이 질문을 C++가 아닌 C++로 표시합니다. –