Se stai cercando qualcosa esattamente come IOCP, non lo troverai, perché non esiste.
Windows utilizza un modello di notifica al completamento (da cui I/O Completamento porti). Avvia un'operazione in modo asincrono e ricevi una notifica quando l'operazione è stata completata.
Le applicazioni Linux (e la maggior parte degli altri simili a Unix) generalmente utilizzano un modello di notifica pronto. Si riceve una notifica che il socket può essere letto o scritto senza blocco. Quindi, esegui l'operazione di I/O, che non si bloccherà.
Con questo modello, non hai bisogno I/O asincrono. I dati vengono immediatamente copiati dentro/fuori dal buffer del socket.
Il modello di programmazione per questo è piuttosto complicato, motivo per cui esistono librerie di astrazione come libevent. Fornisce un modello di programmazione più semplice e astrae le differenze di implementazione tra i sistemi operativi supportati.
C'è anche una notifica sul modello pronto in Windows (seleziona o WSAWaitForMultipleEvents), che potresti aver visto prima. Non è in grado di scalare su un numero elevato di socket, quindi non è adatto per applicazioni di rete ad alte prestazioni.
Non lasciarti scoraggiare:Windows e Linux sono sistemi operativi completamente diversi. Qualcosa che non si adatta bene su un sistema potrebbe funzionare molto bene sull'altro. Questo approccio in realtà funziona molto bene su Linux, con prestazioni paragonabili a IOCP su Windows.
IOCP è pronunciato "I/O asincrono" su varie piattaforme UNIX:
- POSIX AIO è lo standard
- Kernel AIO, epoll e io_uring sembrano essere implementazioni specifiche di Linux
- Kqueue è l'implementazione *BSD e Mac OSX
- L'interfaccia MPI (Message Passing Interface) è un'opzione per l'elaborazione ad alte prestazioni
- riferimento Boost obbligatorio - Boost.Asio