Récemment, j'ai trébuché sur cette jolie bibliothèque JS Slick appelée Nodejs qui agit comme une équipe de serveur JS. P>
La principale caractéristique de la langue étant éventuellement E / S qui donne la capacité inhérente des E / S étant complètement non bloquante à l'aide de rappels !!! p>
Ma question est que, si ce type de mécanisme d'E / S totalement non bloquant existait dans le passé (l'événement donné des E / S a été déployé depuis longtemps), pourquoi ne sont-ils pas plus populaires dans les langues de haut niveau Comme C # et Java (bien que Java ait une implémentation Nio qui prend en charge les E / S non bloquantes)? p>
Actuellement, une opération de lecture / écriture de fichier simple entraîne un blocage complet d'E / S qui n'est pas le cas avec l'événement I / O. p>
J'aimerais mieux comprendre l'événement d'E / S et comment il est différent de ce que nous avons en Java. P>
4 Réponses :
Java a un mauvais support même pour les fichiers d'E / S de base. Ces langues sont créées pour la création rapide d'applications d'interface graphique portable et non destinées aux opérations d'E / S de niveau de niveau à faible niveau dépendantes du système d'exploitation. P>
Je ne peux pas dire, était cette réponse une blague?
Cela ne se compare pas aux E / S éventuellement et critiquez Java E / S. Oui Java Non bloquant les E / S via Multi-threading (non pur sans blocage d'E / S) de l'événement d'E / S entraîné des E / S (qui est pur sans blocage d'E / S), mais chacun a ses propres pro et con. Veuillez soutenir votre déclaration avec des exemples.
Java: http://fr.wikipedia.org/wiki/new_i/oOf/a > une installation d'E / S multiplexée et non bloquante pour écriture de serveurs évolutifs p>
blockQuote> .NET: http://msdn.microsoft.com /en-us/library/dxkwh6zw.aspx p>
Kirk Excellent !!. Mais pouvez-vous expliquer plus sur les nouveaux E / S. Est-ce que cela a entraîné l'événement ??. J'essaie de le comparer avec Nodejs. La raison pour laquelle Nodejs est si populaire est due à cause de son événement d'E / S.
Je ne sais pas si c'est "événement" conduit dans le sens que vous voulez dire, mais c'est un excellent tutoriel: rox-xmlrpc.sourceforge.net/niotuut
@A_VAR: Un moteur entraîné par des événements est en réalité une abstraction de machines d'état. Dans les langues où il n'y a pas de moteur intégré à un événement d'événement, la plupart des développeurs écrivent simplement leur propre machine à états en utilisant une boucle tandis que des instructions de boucle et de commutation (ou d'une table d'expédition). Parfois, les développeurs peuvent être suffisamment dérangés pour généraliser leur mise en œuvre de la machine d'État afin de faire une API de celui-ci, ce qui a entraîné une bibliothèque d'événements pour la langue. Un exemple de ceci est le cadre tordu de Python.
Si je comprends bien, il y a une perception em> em> que la multithreading est plus facile que l'événement, car dans la programmation multithreadé, chaque thread a un flux d'exécution séquentiel simple, tandis que l'événement est constitué de nombreuses petits fragments de code. P>
Bien sûr, cela est mieux indiqué ailleurs, voir par exemple Q.2 de Freshs FAQ . P>
TCL avait eu des événements d'E / S i / O à partir des années 1990 (si je ne me trompe pas). Certes avant 2000, car il s'agissait lorsque TCLHTTPD a battu Apache dans des tests de référence en 2000, les gens ont vraiment commencé à faire attention aux E / S non bloquantes. Lorsque les gens ont vu cela, ils ont commencé à réécrire les serveurs Web. L'un des premiers résultats de celles-ci était Lightpd: l'un des premiers serveurs Web non bloquants écrits dans C. À cette époque, en utilisant des E / S entraînés par des événements dans TCL via le FileeEvent commande était déjà considéré comme une pratique standard dans le monde TCL. P>
AOLSERVER avait (et le fait toujours) avoir un noyau TCL et héberge l'un des sites les plus fréquentés sur le Web (au moins au début): http://www.aol.com/ . Bien que le serveur lui-même soit écrit en C, il utilise l'API C TCL pour mettre en œuvre la manipulation des événements et les E / S. La raison pour laquelle AOLSERVER a utilisé le sous-système d'E / S de TCL est dû au fait qu'il utilise TCL en tant que langue de script et que les développeurs pensaient que, étant donné que quelqu'un d'autre l'a écrit, il pourrait aussi bien l'utiliser. P>
Je crois que AOLSERVER a été publié pour la première fois en 1995. Cela devrait confirmer que les E / S entraînés par des événements étaient déjà disponibles dans TCL de retour au milieu des années 90. P>
TCL est l'un des plus anciens, sinon
Je suis curieux pourquoi tu penses que Java / C # n'a pas ASYNC IO?
Vous voulez dire utiliser Java Nio Package ??. Je ne l'ai jamais utilisé mais je sais que c'est très capable. Je vais changer la question pour résoudre ce problème.