2011-09-13 7 views
8

Este es un término que veo una y otra vez cuando me refiero a los lenguajes de procesamiento en tiempo real. En este caso particular, estoy leyendo la página principal de node.js y tiene esta cita:¿Qué es una función de bloqueo?

"En otros sistemas siempre hay una llamada de bloqueo para iniciar el evento-loop".

¿Qué es una llamada de bloqueo?

Respuesta

13

Función que detiene la ejecución del script hasta que finaliza.

Por ejemplo, si tuviera una función en mi lengua que se utiliza para escribir en un archivo, así:

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

La declaración print sólo se ejecuta una vez que el archivo se ha escrito en el disco . Todo el programa es detenido en esta instrucción. Esto no es perceptible para los pequeños escribe lo suficiente, pero imagina que tenía una enorme burbuja a escribir en el fichero, que tuvo muchos segundos:

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

sólo se ejecuta la instrucción print después de unos segundos de la escritura, y todo el programa se detendría por ese momento. En Node.js, esto se hace asincrónicamente, usando eventos y callbacks. Nuestro ejemplo sería:

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

Donde el tercer parámetro es una función que se debe llamar una vez que se ha escrito el archivo. La instrucción print ubicada después de la función de escritura se invocaría inmediatamente después, independientemente de que el archivo se haya escrito o no. Así que si tuviéramos que escribir una gota lo suficientemente grande, el resultado sería algo como esto:

Do other stuff 
Wrote to file! 

Esto hace applictions muy rápido porque usted no está esperando en un mensaje del cliente, un archivo de escritura u otro. Puede seguir procesando los datos de forma paralela. Esto es considerado por muchos de los puntos fuertes de Node.js.

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

Una función de bloqueo básicamente se computa para siempre. Eso es lo que significa bloquear.

Otras funciones de bloqueo esperarían a que se produzca IO

un sistema IO de no bloqueo, una función que inicia una acción IO, luego se va ralentí, se maneja el resultado de la acción IO cuando sucede.

Básicamente es la diferencia entre un hilo al ralentí y dormir.

0

Una llamada de bloqueo es aquella que no permite que el procesamiento continúe hasta que vuelve al hilo de llamada; esto también se conoce como llamada síncrona. Asincrónico por otro lado significa que los hilos (y el código) pueden ejecutarse al mismo tiempo (simultáneamente).

Cuestiones relacionadas