2010-04-20 6 views
4

Signification the C10K problem, quelle est la meilleure façon d'effectuer des E/S asynchrones sur Mac OS X (à utiliser sur Mac et iPhone/iPad)?E/S asynchrones sous Mac OS X

Sur Linux notre choix est epoll, sous Windows est E/S Ports d'achèvement.

La priorité absolue est la performance et l'évolutivité (des milliers de connexions).

MISE À JOUR

OK. Comme Darwin est un système de type BSD, mon idée commune est d'utiliser kqueue. Est-ce une bonne direction? Ce serait bien d'entendre quelqu'un d'expérimenté dans ce domaine.

Merci

+0

Vous voulez un serveur C10K sur un iPhone? – Potatoswatter

+0

Non :-) Je dois juste le rendre compatible avec l'iPhone. Notre bibliothèque contient à la fois le client et le serveur, de sorte que le client peut être utilisé sur iPhone. – stas

Répondre

1

Si vous utilisez libev, vous pouvez basculer entre une variété de backends IO asynchrones compatibles (epoll, kqueue, sélectionnez, etc ...) sans se soucier des détails de mise en œuvre.

http://software.schmorp.de/pkg/libev.html

+2

... et vous ne serez pas obligé de gonfler votre application avec boost :) –

3

Boost.Asio est une excellente plate-forme de croix, haute performance, C++ bibliothèque en réseau. Sur Mac OS X, il utilise kqueue pour la boucle d'événements du réacteur, d'autres plates-formes utilisent epoll, les ports d'achèvement d'E/S, poll ou select. Il peut évoluer vers des milliers de connexions sans problèmes. Comme son nom l'indique, il favorise la programmation asynchrone en utilisant le modèle de conception proacteur pour la concurrence sans l'utilisation de threads.