GNU/Linux >> Tutoriales Linux >  >> Linux

Confusión sobre el mecanismo de E/S asíncrono interno de node.js

  1. En primer lugar, libuv ha eliminado el libeio de eso. Pero realiza E/S de archivos asíncronos con un grupo de subprocesos como libeio tal como lo mencionaste.

  2. libuv también elimina libev . Realiza la E/S de red asíncrona en función de las interfaces de E/S asíncronas en diferentes plataformas, como epoll , kqueue y IOCP , sin un grupo de subprocesos. Hay un bucle de eventos que se ejecuta en el hilo principal de uv que sondea los eventos de E/S y los procesa.

  3. El grupo de subprocesos dentro de libuv es un grupo de subprocesos de tamaño fijo (4 en un sistema similar a uinx). Realiza un rol de cola de tareas y evita el agotamiento de los recursos del sistema al generar subprocesos indefinidamente cuando aumentan las solicitudes.


Hasta la versión 0.6 nodo utilizado libev para ejecutar event-loop y libeio para E/S asíncrona, (el backend de Unix se basa en gran medida en estas dos bibliotecas). Pero libuv ha comenzado a reemplazar libev y libeio en la versión 0.8. Ejecuta, mantiene y gestiona todos los io y eventos del pool de eventos. libuv es la elección en bibliotecas de E/S asíncronas multiplataforma.

  1. Sí, hasta el nodo 0.6, obsoleto en 0.8 y usa un grupo de subprocesos
  2. Sí, pero libev no utiliza el grupo de subprocesos. Ver aquí

    Aclaración:según el enlace en la pregunta que publiqué, libeio admite todas las funciones POSIX relacionadas con E/S (que incluye socket). Pero el autor del nodo decidió usarlo solo para E/S de archivos asíncronos y usa libev para E/S de red. No sé de dónde lo escuchaste, pero puedes usar epoll en archivos regulares.

  3. libev usa bucle de eventos, así que no hay problemas aquí.

  4. Sí, IOCP maneja la E/S asíncrona en Windows, el kernel usa grupos de subprocesos.
  5. El nuevo kernel de Linux tiene epoll, kqueue en el nuevo kernel de BSD. libev y libeio eran para el entorno Linux y proporciona bucle de eventos/E/S asíncrona para todos los núcleos (admite select, poll, epoll, kqueue).

Actualizar preguntas:

  1. no sé mucho sobre libuv
  2. tal vez suficiente (no sé)
  3. Aquí están mis hallazgos en Windows 8, lo verifiqué a través de Process Explorer. Mostró 4 subprocesos, 1 DLL, 1 archivo y 1 sección (un total de 7 entradas) para un proceso de aplicación de nodo.

  4. ps -eLf muestra todos los subprocesos y procesos, tal vez lo esté filtrando en exceso, solo busque el pid del proceso del nodo como ps -eLf | grep x donde x es pid para el proceso del nodo.


Linux
  1. Linux:¿determinación del archivo específico responsable de la E/S alta?

  2. ¿Cómo acelerar por proceso I/O a un límite máximo?

  3. Conflictos de Node.js:/sbin/node Vs /usr/bin/node?

  4. Configurar unidades flash en instancias de E/S alta como unidades de datos

  5. Consideraciones para migrar a un servidor en la nube de uso general o de E/S

10 Comando iostat de Linux para informar estadísticas de CPU y E/S

10 ejemplos de iozone para la medición del rendimiento de E/S de disco en Linux

¿Cómo purgar cachés de E/S de disco en Linux?

¿Realmente no hay E/S de bloque asíncrono en Linux?

¿Cuál es el equivalente Unix/Linux de E/S registrada?

Costo total de E/S de un proceso