문제

Windows 최고의 I/O 이벤트 알림 기능은 무엇입니까?

내 말은...

  1. 입력 파일 설명자 수에는 제한이 없습니다.
  2. 모든 파일 설명자(디스크 파일, 소켓 등)에서 작동합니다.
  3. 다양한 알림 모드 제공(Edge Triggered, Limit Trigger)
도움이 되었습니까?

해결책

Windows에서 비동기 작업은 설명자가 아닌 파일 작업으로 수행됩니다.파일 작업이 비동기적으로 완료될 때까지 기다리는 방법에는 여러 가지가 있습니다.

예를 들어, 네트워크 소켓에서 데이터를 사용할 수 있는 시기를 알고 싶다면 소켓에서 비동기 읽기 요청을 실행하고 완료되면 데이터를 사용할 수 있고 검색할 수 있습니다.

Win32에서 비동기 작업은 OVERLAPPED 미해결 IO 작업에 대한 상태를 포함하는 구조입니다.

  1. 파일을 다음과 연결합니다. IO 완료 포트 비동기 IO 요청을 전달합니다.작업이 완료되면 작업자 스레드가 대기하고 도착 시 검색할 수 있는 대기열에 완료 메시지를 넣습니다.사용자 정의 메시지를 대기열에 넣을 수도 있습니다.완료 포트와 함께 사용할 수 있는 파일 또는 대기 중인 메시지 수에는 제한이 없습니다.
  2. 이벤트와 함께 각 IO 작업을 전달합니다.작업과 관련된 이벤트는 작업이 완료되면 신호를 받습니다(대기 충족).사용 WaitForMultipleObjects 모든 이벤트를 한 번에 기다리기.기다릴 수 밖에 없다는 단점이 있습니다 MAXIMUM_WAIT_OBJECTS 한 번에 개체(64).동시에 다른 유형의 이벤트(프로세스/스레드 종료, 뮤텍스, 이벤트, 세마포)를 기다릴 수도 있습니다.
  3. 사용 스레드 풀.스레드 풀은 대기하고 실행하기 위해 무제한의 개체 및 파일 작업을 사용할 수 있습니다. 사용자 정의 함수 완료되면 각각.
  4. 사용 ReadFileEx 그리고 WriteFileEx 대기열에 넣다 비동기 프로시저 호출 (APC)를 호출 스레드로 SleepEx (또는 WaitFor{Single|Multiple}ObjectsEx) 와 함께 Alertable TRUE 각 작업이 완료되면 알림 메시지를 받습니다.이 방법은 IO 완료 포트와 유사하지만 하나의 스레드에만 작동합니다.

Windows NT 커널은 소켓, 디스크 파일, 파이프 등을 구별하지 않습니다.내부적으로 파일 작업:이러한 옵션은 모두 모든 파일 형식에서 작동합니다.

다른 팁

리브브

libuv Unix 및 Windows용 이벤트 I/O를 제공하고 소켓, 파일 및 파이프를 지원합니다.Node.js의 플랫폼 계층입니다.

자세한 내용은 다음을 참조하세요. http://nikhilm.github.io/uvbook/introduction.html

제가 아는 한 아직은 없습니다.친구와 저는 오픈 소스 Windows epoll 구현(아래 링크) 작업을 하고 있지만 Linux 구현과 동일하게 작동하도록 만드는 방법을 찾는 데 문제가 있습니다.

현재 장애물:

  • Linux에서는 파일 설명자와 소켓 설명자를 서로 바꿔서 사용할 수 있지만 Windows에서는 그렇지 않습니다.둘 다 epoll 구현과 호환되어야 합니다.
  • Windows에서는 커널 이벤트를 가져오는 것이 매우 까다롭습니다.이것이 Linux에서 epoll이 작동하는 방식입니다.우리는 크로스 플랫폼 epoll 라이브러리를 사용하는 프로그램이 Linux보다 Windows에서 눈에 띄게 느리게 실행될 것이라고 추측하고 있습니다.

프로젝트가 진행되면서 다시 돌아와서 이 게시물을 업데이트하도록 노력하겠습니다.

http://sourceforge.net/projects/cpoll

select() 함수는 POSIX이며 "winsock.h" 또는 "winsock2.h"를 포함한 Windows에서 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top