tagger tag source para open mp3id mac linux asynchronous epoll event-driven aio

linux - tag - ¿Cuál es la diferencia entre el evento controlado y el asincrónico? Entre epoll y AIO?



tag editor para mac (3)

Los eventos controlados por eventos y asincrónicos a menudo se usan como sinónimos. ¿Hay alguna diferencia entre los dos?

Además, ¿cuál es la diferencia entre epoll y aio ? ¿Cómo encajan?

Por último, he leído muchas veces que AIO en Linux está horriblemente roto. ¿Cómo está roto?

Gracias.


Evento impulsado es un hilo único donde los eventos se registran para un cierto escenario. Cuando se enfrenta ese escenario, los eventos se disparan. Sin embargo, incluso en ese momento, cada uno de los eventos se dispara de forma secuencial. No hay nada asíncrono al respecto. Node.js (servidor web) usa eventos para tratar múltiples solicitudes.

Asincrónico es básicamente multitarea. Puede generar múltiples hilos o procesos para ejecutar una determinada función. Es totalmente diferente al evento impulsado en el sentido de que cada hilo es independiente y apenas interactúa con el hilo principal de una manera fácil y receptiva. Apache (servidor web) utiliza varios subprocesos para tratar las solicitudes entrantes.


Eventos es uno de los paradigmas para lograr la ejecución asincrónica. Pero no todos los sistemas asincrónicos usan eventos. Se trata del significado semántico de estos dos: uno es la súper entidad de otro.

epoll y aio usan diferentes metáforas:

epoll es una operación de bloqueo ( epoll_wait() ) - bloqueas el hilo hasta que ocurra algún evento y luego envías el evento a diferentes procedimientos / funciones / ramas en tu código.

En AIO, pasa la dirección de la función de devolución de llamada (rutina de finalización) al sistema y el sistema llama a su función cuando sucede algo.

El problema con AIO es que el código de la función de devolución de llamada se ejecuta desde el hilo del sistema y, por lo tanto, encima de la pila del sistema. Algunos problemas con eso como te puedes imaginar.


Son cosas completamente diferentes.

El paradigma basado en eventos significa que un objeto llamado "evento" se envía al programa cada vez que sucede algo, sin que ese "algo" tenga que ser sondeado a intervalos regulares para descubrir si ha sucedido. Ese "evento" puede quedar atrapado por el programa para realizar algunas acciones (es decir, un "controlador"), ya sea sincrónico o asincrónico.

Por lo tanto, el manejo de eventos puede ser sincrónico o asincrónico. JavaScript, por ejemplo, usa un sistema de eventos sincrónicos.

Asíncrono significa que las acciones pueden suceder independientemente de la corriente de ejecución "principal" actual. Eso sí, NO significa "paralelo" o "hilo diferente". Una acción "asíncrona" puede ejecutarse en el hilo principal, bloqueando la secuencia de ejecución "principal" mientras tanto. Por lo tanto, no confunda "asincrónico" con "multi-threading".

Puede decir que, técnicamente hablando, una operación asíncrona asume automáticamente eventos (al menos "completado", "fallado" o "cancelado / cancelado") (uno o más de estos) se envían al instigador de la operación (o al O / S subyacente en sí) para indicar que la operación ha cesado. Por lo tanto, asincrónica siempre se basa en eventos, pero no al revés.