Wenn Sie genau nach IOCP suchen, werden Sie es nicht finden, weil es nicht existiert.
Windows verwendet ein Benachrichtigungsmodell (daher I/O Completion Häfen). Sie starten einen Vorgang asynchron und erhalten eine Benachrichtigung, wenn dieser Vorgang abgeschlossen ist.
Linux-Anwendungen (und die meisten anderen Unix-Äquivalente) verwenden im Allgemeinen ein Notify-On-Ready-Modell. Sie erhalten eine Benachrichtigung, dass der Socket ohne Blockierung gelesen oder beschrieben werden kann. Dann führen Sie die E/A-Operation durch, die nicht blockiert.
Bei diesem Modell brauchen Sie es nicht asynchrone E/A. Die Daten werden sofort in / aus dem Socket-Puffer kopiert.
Das Programmiermodell dafür ist etwas knifflig, weshalb es Abstraktionsbibliotheken wie libevent gibt. Es bietet ein einfacheres Programmiermodell und abstrahiert die Implementierungsunterschiede zwischen den unterstützten Betriebssystemen.
Es gibt auch ein Benachrichtigungsmodell in Windows (select oder WSAWaitForMultipleEvents), das Sie sich vielleicht schon einmal angesehen haben. Es kann nicht auf eine große Anzahl von Sockets skaliert werden und ist daher nicht für Hochleistungsnetzwerkanwendungen geeignet.
Lassen Sie sich davon nicht abschrecken – Windows und Linux sind völlig unterschiedliche Betriebssysteme. Etwas, das auf einem System nicht gut skaliert, kann auf dem anderen sehr gut funktionieren. Dieser Ansatz funktioniert tatsächlich sehr gut unter Linux, mit einer Leistung, die mit IOCP unter Windows vergleichbar ist.
IOCP wird auf verschiedenen UNIX-Plattformen als "asynchronous I/O" ausgesprochen:
- POSIX AIO ist der Standard
- Kernel AIO, epoll und io_uring scheinen Linux-spezifische Implementierungen zu sein
- Kqueue ist die *BSD- und Mac OSX-Implementierung
- Message Passing Interface (MPI) ist eine Option für High Performance Computing
- obligatorische Boost-Referenz - Boost.Asio