Question

événementielle et asynchrone sont souvent utilisés comme synonymes. Y a-t-il des différences entre les deux?

En outre, quelle est la différence entre epoll et aio? Comment vous situez-ils ensemble?

Enfin, je l'ai lu plusieurs fois que AIO sous Linux est horriblement brisée. Comment exactement est-il cassé?

Merci.

Était-ce utile?

La solution

événements est l'un des paradigmes pour réaliser l'exécution asynchrone. Mais pas tous les systèmes asynchrones utilisent les événements. C'est sur le sens sémantique de ces deux -. L'un est super-entité d'une autre

epoll et AIO utiliser différentes métaphores:

epoll est une opération de blocage (epoll_wait()) - vous bloquer le fil jusqu'à ce qu'un événement se produit et vous décomposez l'événement à différentes procédures / fonctions / branches dans votre code.

Dans AIO, vous passez l'adresse de votre fonction de rappel (routine d'achèvement) au système et le système appelle votre fonction lorsque quelque chose se passe.

est un problème AIO que votre code de fonction de rappel fonctionne sur le fil du système et ainsi au-dessus de la pile système. Quelques problèmes avec ce que vous pouvez imaginer.

Autres conseils

Ce sont des choses complètement différentes.

Les événements axée sur les moyens de paradigme qu'un objet appelé est envoyé un « événement » au programme chaque fois que quelque chose se passe, sans que « quelque chose » ayant à interroger à intervalles réguliers pour savoir s'il est arrivé. Ce « événement » peut être pris au piège par le programme pour effectuer certaines actions (par exemple un « gestionnaire ») -. Synchrone ou asynchrone

Par conséquent, le traitement des événements peut être soit synchrone ou asynchrone. JavaScript, par exemple, utilise un système de concours complet synchrone.

signifie Asynchronous que les actions peuvent se produire indépendamment du flux d'exécution « principal » en cours. Rappelez-vous, il fait pas moyenne "parallèle" ou "thread différent". Une action « asynchrone » peut effectivement fonctionner sur le thread principal, bloquant le flux d'exécution « principal » dans l'intervalle. Donc, ne confondez pas "asynchrone" avec "multi-threading".

Vous pouvez dire que, techniquement parlant, une opération asynchrone automatiquement prend concours complet - au moins « achevé », « en défaut » ou « avortés / annulés » événements (un ou plusieurs de ces éléments) sont envoyée à l'initiateur de l'opération (ou la sous-jacent O / elle-même S) pour signaler que l'opération a pris fin. Ainsi, async est toujours événementielle, mais pas l'inverse.

Event Driven

est un fil unique où les événements sont enregistrés pour un certain scénario. Lorsque ce scénario est confronté, les événements sont déclenchés. Cependant, même à ce moment-là chacun des événements sont déclenchés de manière séquentielle. Il n'y a rien Asynchronous à ce sujet. Node.js (serveur web) utilise des événements pour faire face à de multiples demandes.

Asynchronous est essentiellement multi-tâches. Il peut engendrer de multiples threads ou processus pour exécuter une fonction. Il est tout à fait différent de l'événement entraîné dans le sens où chaque fil est indépendant et à peine interagissez avec le fil conducteur d'une manière simple réactive. Apache (serveur Web) utilise plusieurs threads pour traiter les demandes entrantes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top