La diferencia esencial entre proceso e hilo.

Hace unos días, un compañero de clase me preguntó por qué el electrón es multiproceso en lugar de multihilo. Resume hoy y responde esta pregunta.

En primer lugar, comprendamos el concepto de proceso: un proceso es la unidad más pequeña para que una computadora asigne recursos .

En pocas palabras, un proceso es un contenedor. Por ejemplo, una hermosa villa pequeña, la villa tiene un dormitorio, cocina, estudio, baño, etc., por supuesto, hay una familia de tres viviendo en ella. Cuando mamá llevó a su hija a jugar, papá estaba solo en casa. En este momento, papá puede ir a donde quiera en casa solo y hacer lo que quiera. En este momento, papá es como un hilo (solo hay un hilo activo en este proceso), la pequeña villa es como un proceso , y el la cocina y el estudio en casa son como un proceso, los recursos ocupados por este proceso. Cuando tres personas viven juntas (equivalente a tres hilos), a veces puede haber algunos pequeños conflictos. Por ejemplo, cuando la hija ocupa la televisión para ver dibujos animados, el padre no puede ver el canal de deportes. Esta es la competencia entre hilos por recursos. . Por supuesto, la mayoría de las veces, existe una relación cooperativa entre hilos (si creamos un hilo para pelear, ¿por qué crearlo?). Por ejemplo, si la madre cocina para el padre y la hija en la cocina, el padre trabaja en el estudio para ganar dinero para mantener a la familia y la hija hace la tarea, cada uno cumple con sus deberes, entonces la familia será feliz y armoniosa. En consecuencia, el proceso se está ejecutando de manera saludable.

¿Cómo ver el proceso en la computadora?

Hilo: es la unidad más pequeña de ejecución del programa .
Abra el administrador de tareas,
inserte la descripción de la imagen aquí
el programa está muerto, el proceso está "en vivo" o se está ejecutando

como crear un proceso

Hay cuatro funciones principales para que nodejs cree subprocesos:

spawnexecexecFilefork

Interesado en leer mi artículo: https://blog.csdn.net/woyebuzhidao321/article/details/129567942

¿Cómo ver hilos en la computadora?

Un proceso puede contener varios hilos. No son invisibles e intangibles , como se ilustra a continuación.

inserte la descripción de la imagen aquí
Puede ver que un proceso contiene varios subprocesos.

En términos un poco más técnicos, un subproceso es un proceso ligero y la unidad más pequeña de ejecución de programa . El uso de subprocesos múltiples en lugar de procesos múltiples para diseñar programas concurrentes se debe a que el costo de cambiar y programar subprocesos es mucho menor que el de los procesos.

como crear un hilo

En Node.js, puede Worker crear sus propios objetos de subprocesos a través de objetos. Worker es un módulo integrado de Node.js que proporciona una manera fácil de crear subprocesos de JavaScript independientes. Aquí hay un ejemplo simple:

const {
    
     Worker } = require('worker_threads');

// 创建新的线程
const worker = new Worker('./worker.js', {
    
     workerData: {
    
     message: 'hello' } });

// 监听线程消息
worker.on('message', (message) => {
    
    
  console.log(`Received message from worker: ${
      
      message}`);
});

// 监听线程错误
worker.on('error', (error) => {
    
    
  console.error(`Error in worker: ${
      
      error}`);
});

// 监听线程退出事件
worker.on('exit', (code) => {
    
    
  console.log(`Worker exited with code ${
      
      code}`);
});

En el ejemplo anterior, Workerse crea un nuevo hilo a través del objeto y workerDatase pasa un mensaje al hilo usando la opción. El archivo de subprocesos worker.js puede workerDataobtener el mensaje pasado a través del atributo y enviar un mensaje al subproceso principal cuando sea necesario. En el subproceso principal, puede monitorear el mensaje, el error y los eventos de salida del subproceso, y realizar el procesamiento correspondiente según sea necesario. En el archivo de subprocesos worker.js, parentPortel objeto se puede usar para comunicarse con el subproceso principal. Por ejemplo:

const {
    
     parentPort, workerData } = require('worker_threads');

console.log(`Received message in worker: ${
      
      workerData.message}`);

// 向主线程发送消息
parentPort.postMessage('world');

En el código anterior, use workerDatael atributo para obtener el mensaje pasado y mostrarlo en la consola. Luego use postMessageel método para enviar un mensaje al hilo principal. Cabe señalar que el objeto Worker de Node.js utiliza una implementación basada en subprocesos en lugar de una implementación basada en procesos. Por lo tanto, los subprocesos creados se ejecutan en el mismo proceso y diferentes subprocesos comparten la misma memoria. En la programación de subprocesos múltiples, debe prestar atención a la seguridad de los subprocesos y los recursos compartidos para evitar posibles problemas de concurrencia.

¿Por qué el electrón es multiproceso en lugar de multihilo?

Las principales razones para adoptar multiprocesamiento en lugar de subprocesos múltiples son la seguridad y la estabilidad. En el caso de subprocesos múltiples, el bloqueo de un subproceso puede provocar el bloqueo de toda la aplicación , mientras que en el caso de procesos múltiples, el bloqueo de un proceso solo afectará a este proceso y no afectará a otros procesos, mejorando así la rendimiento de la aplicación estabilidad.
Además, el uso de procesos múltiples por parte de Electron también puede lograr una mejor gestión y asignación de recursos. Cada proceso tiene su propio espacio de memoria y tiempo de CPU, lo que puede hacer un mejor uso de los recursos del sistema y mejorar el rendimiento de la aplicación.
Finalmente, el multiprocesamiento también permite una mejor seguridad. Cada proceso tiene su propio entorno de espacio aislado, que puede evitar que el código malicioso ataque y destruya toda la aplicación.
Por lo tanto, si bien los subprocesos múltiples pueden ser más eficientes en algunos casos, el procesamiento múltiple es una mejor opción en términos de seguridad y estabilidad.

Si hay algún problema en el artículo, bienvenido al hermano Meng para que me corrija.

Supongo que te gusta

Origin blog.csdn.net/woyebuzhidao321/article/details/131676125
Recomendado
Clasificación