Si vous cherchez quelque chose exactement comme IOCP, vous ne le trouverez pas, car il n'existe pas.
Windows utilise un modèle de notification à l'achèvement (d'où I/O Completion ports). Vous démarrez une opération de manière asynchrone et recevez une notification lorsque cette opération est terminée.
Les applications Linux (et la plupart des autres applications similaires à Unix) utilisent généralement un modèle de notification prêt à l'emploi. Vous recevez une notification indiquant que le socket peut être lu ou écrit sans blocage. Ensuite, vous effectuez l'opération d'E/S, qui ne bloquera pas.
Avec ce modèle, vous n'avez pas besoin E/S asynchrones. Les données sont immédiatement copiées dans / hors du tampon de socket.
Le modèle de programmation pour cela est un peu délicat, c'est pourquoi il existe des bibliothèques d'abstraction comme libevent. Il fournit un modèle de programmation plus simple et élimine les différences d'implémentation entre les systèmes d'exploitation pris en charge.
Il existe également un modèle de notification prêt à l'emploi dans Windows (select ou WSAWaitForMultipleEvents), que vous avez peut-être déjà consulté. Il ne peut pas évoluer vers un grand nombre de sockets, il n'est donc pas adapté aux applications réseau hautes performances.
Ne vous laissez pas décourager - Windows et Linux sont des systèmes d'exploitation complètement différents. Quelque chose qui ne s'adapte pas bien sur un système peut très bien fonctionner sur l'autre. Cette approche fonctionne en fait très bien sous Linux, avec des performances comparables à IOCP sous Windows.
IOCP se prononce "E/S asynchrones" sur diverses plates-formes UNIX :
- POSIX AIO est la norme
- Kernel AIO, epoll et io_uring semblent être des implémentations spécifiques à Linux
- Kqueue est l'implémentation *BSD et Mac OSX
- Message Passing Interface (MPI) est une option pour le calcul haute performance
- référence Boost obligatoire - Boost.Asio