2009-01-03 6 views
1

J'ai récemment rencontré quelque chose appelé IOCP sur la plate-forme Windows, pour être plus précis: Ports de contrôle d'entrée/sortie. Cela semble être le moyen le plus efficace pour coder votre logiciel serveur quand il doit contenir des milliers d'utilisateurs simultanément. (Corrigez-moi si je me trompe, mais les threads par socket, l'interrogation et les rappels asynchrones (thread sur chaque callback) ne sont pas assez efficaces.)IOCP, bibliothèques multi-plateformes?

Je me demande s'il existe des bibliothèques tierces disponibles mettre en œuvre ce concept. Je sais que l'API win32 nous fournit CreateIoCompletionPort, FreeBSD a kqueue et linux en général peut utiliser/dev/epoll qui fonctionne de manière similaire ... Mais n'y a-t-il pas une bibliothèque crossplatform (comme boost :: thread) qui gère ce genre de choses pour moi?

+0

En fait, IOCP signifie port d'achèvement d'E/S et non «port de contrôle». –

+0

Et vous n'avez absolument rien à redire sur le dévouement des threads par client. Vous rencontrez rapidement de graves problèmes de changement de contexte, généralement dans le premier millier de clients sur la plupart des systèmes d'exploitation (Windoze est un exemple stellaire de cela). – WhozCraig

Répondre

5

Avez-vous regardé boost :: asio? Je ne suis pas sûr si elle a encore toutes ces fonctionnalités, mais je crois que c'est l'une des choses pour lesquelles elle est destinée.

+0

Maintenant pourquoi je n'ai pas pensé à ça :) –

1

libevent fonctionne sur un certain nombre de systèmes d'exploitation * nix et fonctionne également sous Windows.

2

Je sais qu'il s'agit d'une réponse tardive à ce sujet, mais pour ceux qui s'intéressent à une bibliothèque x-platform prenant en charge async IO sous Linux/UNIX et Windows, vous pouvez jeter un oeil à libuv.

libuv a été initialement construit comme les fondements fondamentaux de Node.js, mais il a évolué pour devenir une bibliothèque d'abstraction puissante pour beaucoup de bas niveau, les préoccupations x-plate-forme, y compris async IO, sockets TCP non bloquants & canaux nommés, UDP, temporisateurs, génération de processus enfant , temps de résolution élevé, planification de pool de threads, etc.