GNU/Linux >> Linux Esercitazione >  >> Linux

Confusione sul meccanismo di I/O asincrono interno di node.js

  1. Prima di tutto, libuv ha rimosso il libeio da. Ma esegue l'I/O di file asincrono con un pool di thread come libeio proprio come hai detto.

  2. libuv rimuove anche libev . Esegue l'I/O di rete asincrono in base alle interfacce I/O asincrone in diverse piattaforme, come epoll , kqueue e IOCP , senza pool di thread. C'è un ciclo di eventi che gira sul thread principale di uv che esegue il polling degli eventi di I/O e li elabora.

  3. Il pool di thread all'interno di libuv è un pool di thread di dimensioni fisse (4 in un sistema simile a uinx). Svolge un ruolo di coda delle attività ed evita l'esaurimento delle risorse di sistema generando thread a tempo indeterminato quando le richieste aumentano.


Fino alla versione 0.6 il nodo usava libev per eseguire event-loop e libeio per l'I/O asincrono, (il backend Unix poggia pesantemente su queste due librerie). Ma libuv ha iniziato a sostituire libev e libeio nella versione 0.8. Esegue, mantiene e gestisce tutti gli io e gli eventi nel pool di eventi. libuv è la scelta nelle librerie IO asincrone multipiattaforma.

  1. Sì, fino al nodo 0.6, deprecato in 0.8 e utilizza il pool di thread
  2. Sì, ma libev non utilizza il pool di thread. Vedi qui

    Chiarimento:secondo il link nella domanda che ho postato, libeio supporta tutte le funzioni POSIX che si occupano di I/O (che include il socket). Ma l'autore del nodo ha deciso di usarlo solo per I/O di file asincroni e usa libev per I/O di rete. Non so da dove l'hai sentito ma puoi usare epoll su file normali.

  3. libev utilizza il ciclo di eventi quindi nessun problema qui.

  4. Sì IOCP gestisce l'I/O asincrono in Windows, il kernel utilizza pool di thread.
  5. Il nuovo kernel Linux ha epoll, kqueue nel nuovo kernel BSD. libev e libeio were per l'ambiente linux e fornisce loop eventi/async IO per tutti i kernel (supporta select, poll, epoll, kqueue).

Aggiorna domande:

  1. non so molto su libuv
  2. forse abbastanza (non lo so)
  3. Ecco i miei risultati su Windows 8, verificati tramite Process Explorer. Mostrati 4 thread, 1 DLL, 1 file e 1 sezione (totale 7 voci) per un processo di applicazione del nodo.

  4. ps -eLf mostra tutti i thread e i processi, forse lo stai filtrando eccessivamente, cerca solo il pid del processo del nodo come ps -eLf | grep x dove x è il pid per il processo del nodo.


Linux
  1. Report di I/O dalla riga di comando di Linux

  2. Come limitare l'I/o di processo a un limite massimo?

  3. N Equivalente a Top ma per I/o di rete?

  4. Node.js Conflitti:/sbin/node Vs /usr/bin/node?

  5. Come si esegue l'I/O della console non bloccante su Linux in C?

10 Linux iostat Comando per segnalare la CPU e le statistiche di I/O

10 esempi di iozone per la misurazione delle prestazioni di I/O del disco su Linux

Porte di completamento Linux e I/O?

Qual è l'equivalente Unix/Linux dell'I/O registrato?

Come controllare l'utilizzo dell'I/O del disco per processo?

Costo totale di I/O di un processo