2011-09-13 15 views
8

Questo è un termine che vedo ripetutamente quando si parla di linguaggi di elaborazione in tempo reale. In questo caso specifico, sto leggendo la homepage node.js e questa citazione è:Che cos'è una funzione di blocco?

"In altri sistemi c'è sempre una chiamata di blocco per avviare il ciclo di eventi."

Che cos'è una chiamata di blocco?

risposta

13

Una funzione che interrompe l'esecuzione dello script fino al termine.

Per esempio, se ho avuto una funzione nella mia lingua, che è stato utilizzato per scrivere in un file, in questo modo:

fwrite(file, "Contents"); 
print("Wrote to file!"); 

La dichiarazione print verrebbe eseguito solo una volta che il file è stato scritto su disco . L'intero programma è arrestato su questa istruzione. Questo non è evidente per le piccole scrive abbastanza, ma immaginate ho avuto un enorme blob per scrivere sul file, quello che ha preso molti secondi:

fwrite(file, blob); 
print("Wrote to file!"); 

La dichiarazione print dovrebbe essere eseguito solo dopo pochi secondi di scrittura, e l'intero programma sarebbe stato fermato per quel tempo. In Node.js, questa roba viene eseguita in modo asincrono, utilizzando eventi e richiamate. Il nostro esempio diventerebbe:

fwrite(file, blob, function() { 
    print("Wrote to file!"); 
}); 
print("Do other stuff"); 

Dove il terzo parametro è una funzione da chiamare una volta che il file è stato scritto. L'istruzione print situata dopo la funzione di scrittura verrà chiamata immediatamente dopo, indipendentemente dal fatto che il file sia stato scritto o meno. Quindi, se dovessimo scrivere un enorme blob sufficiente, l'uscita potrebbe essere simile a questo:

Do other stuff 
Wrote to file! 

Questo rende molto applictions veloce perché non siete in attesa di un messaggio del cliente, una scrittura di file o altro. È possibile continuare a elaborare i dati in modo parallelo. Questo è considerato da molti uno dei punti di forza di Node.js.

2
var block = function _block() { 
    while(true) { 
    readInputs(); 
    compute(); 
    drawToScreen(); 
    } 
} 

Una funzione di blocco calcola fondamentalmente per sempre. Questo è ciò che significa bloccando.

Funzioni di blocco avrebbero aspettato IO avvenga

un sistema IO non bloccante intende una funzione avvia un'azione IO, poi va inattiva quindi gestisce il risultato dell'azione IO quando succede.

È fondamentalmente la differenza tra un filo inattivo e il sonno.

0

Una chiamata di blocco è una che non consente l'elaborazione di continuare fino a quando non ritorna al thread chiamante - questa viene anche definita chiamata sincrona. D'altra parte asincrono significa che thread (e codice) possono essere eseguiti contemporaneamente (contemporaneamente).

Problemi correlati