GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la différence entre événementiel et asynchrone ? Entre epoll et AIO ?

Les événements sont l'un des paradigmes pour réaliser une exécution asynchrone. Mais tous les systèmes asynchrones n'utilisent pas les événements. Il s'agit de la signification sémantique de ces deux - l'un est la super-entité de l'autre.

epoll et aio utilisent des métaphores différentes :

epoll est une opération bloquante (epoll_wait() ) - vous bloquez le thread jusqu'à ce qu'un événement se produise, puis vous envoyez l'événement à différentes procédures/fonctions/branches dans votre code.

Dans AIO, vous transmettez 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 produit.

Le problème avec AIO est que votre code de fonction de rappel s'exécute sur le thread système et donc au-dessus de la pile système. Quelques problèmes avec cela comme vous pouvez l'imaginer.


Ce sont des choses complètement différentes.

Le paradigme événementiel signifie qu'un objet appelé "événement" est envoyé au programme chaque fois que quelque chose se produit, sans que ce "quelque chose" ait à être interrogé à intervalles réguliers pour découvrir si cela s'est produit. Cet "événement" peut être piégé par le programme pour effectuer certaines actions (c'est-à-dire un "gestionnaire") -- synchrone ou asynchrone.

Par conséquent, la gestion des événements peut être synchrone ou asynchrone. JavaScript, par exemple, utilise un système d'événements synchrones.

Asynchrone signifie que des actions peuvent se produire indépendamment du flux d'exécution "principal" actuel. Remarquez, ce n'est PAS signifie "parallèle" ou "fil différent". Une action "asynchrone" peut en fait s'exécuter sur le thread principal, bloquant le flux d'exécution "principal" entre-temps. Ne confondez donc pas "asynchrone" avec "multi-threading".

Vous pouvez dire que, techniquement parlant, une opération asynchrone suppose automatiquement événements -- au moins les événements "terminés", "en panne" ou "abandonnés/annulés" (un ou plusieurs d'entre eux) sont envoyés à l'instigateur de l'opération (ou à l'O/S sous-jacent lui-même) pour signaler que l'opération a cessé . Ainsi, async est toujours événementiel, mais pas l'inverse.


Piloté par les événements est un thread 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 est déclenché de manière séquentielle. Il n'y a rien d'asynchrone à ce sujet. Node.js (serveur Web) utilise des événements pour traiter plusieurs requêtes.

L'asynchrone est essentiellement multitâche. Il peut générer plusieurs threads ou processus pour exécuter une certaine fonction. C'est totalement différent de l'événementiel dans le sens où chaque thread est indépendant et n'interagit guère avec le thread principal de manière simple et réactive. Apache (serveur Web) utilise plusieurs threads pour traiter les requêtes entrantes.


Linux
  1. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  2. Quelle est la différence entre Redhat et centOS ?

  3. Quelle est la différence entre insmod et modprobe

  4. Quelle est la différence entre le mutex et la section critique ?

  5. Quelle est la différence entre fsck et e2fsck ?

Quelle est la différence entre Linux et Unix ?

Quelle est la différence entre la connexion et le shell sans connexion

Quelle est la différence entre la commande apt et apt-get ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

Quelle est la différence entre $(CC) et $CC ?