Me pregunto si se requieren mutexes/bloqueos para el acceso a los datos dentro de Node.js.
Nope! Los eventos se manejan en el momento en que no hay otro código para ejecutar, esto significa que no habrá contención, ya que solo el código que se está ejecutando actualmente tiene acceso a esa matriz interna. Como efecto secundario de que un nodo sea de subproceso único, los cálculos largos bloquearán todos los demás eventos hasta que se realice el cálculo.
Entiendo que Javascript (y por lo tanto Node.js) tiene un solo subproceso. Simplemente no tengo claro cómo se manejan los eventos. ¿Los eventos interrumpen?
No, los eventos no se interrumpen. Por ejemplo, si coloca un while(true){}
en su código, detendría la ejecución de cualquier otro código, porque siempre hay otra iteración del ciclo que se ejecutará.
Si tiene un cálculo de larga ejecución, es una buena idea usar process.nextTick, ya que esto permitirá que se ejecute cuando no se está ejecutando nada más (estoy confundido con esto: el ejemplo a continuación muestra que yo ' Probablemente tenga razón al respecto, probablemente sin correr interrupciones).
Si tiene alguna otra pregunta, siéntase libre de detenerse en y hacer preguntas. Además, pedí un par de personas a mirar esto y asegurarse de que no estoy totalmente equivocado;)
var count = 0;
var numIterations = 100;
while(numIterations--) {
process.nextTick(function() {
count = count + 1;
});
}
setTimeout(function() {
console.log(count);
}, 2);
//
//=> 100
//
Gracias a AAA_awright de # Node.js :)
mi lectura del documento Node.js para process.nextTick (devolución de llamada) es que añade devolución de llamada() a la cola para el siguiente pulso. No dice nada acerca de esperar un tic o ejecutar el tic evento loop antes de volver ... así que leí este código como agregar 100 devoluciones de llamada que cuentan ++ a la lista TODO para el siguiente tic ... ?? – Paul
@Paul correcto!/fyi # node.js IRC te da la bienvenida: http://bit.ly/nodeIRC – DTrejo