"Proceso, hilo, co-rutina" programando tres hermanos de esas cosas ~ lo entenderás después de leer

Mira cómo responder estas preguntas:

  • Que son procesos e hilos
  • ¿Cuál es la diferencia entre proceso e hilo?
  • Por qué hay procesos e hilos
  • ¿Cuál es la diferencia entre el modo kernel y el modo de usuario?
  • ¿Cuáles son las características de las corrutinas?

Una serie de preguntas acompañan a cada etapa de estudio y trabajo, preguntas que realmente no son fáciles de responder. A menos que realmente comprenda sus principios subyacentes, es fácil involucrarse.

Así que hoy, veamos cómo surgen estos problemas y por qué siempre se preguntan. Empecemos.

Procesos e hilos

Proceso, generalmente abrimos un reproductor, abrimos un bloc de notas, estas son aplicaciones, una copia ejecutiva del software, este es el proceso. Desde el nivel del sistema operativo, el proceso es la unidad básica de asignación de recursos, y el subproceso se ha denominado proceso ligero durante mucho tiempo y es la unidad básica de ejecución del programa .

De esta manera, una unidad básica para la asignación de recursos y una unidad básica para la ejecución del programa. En entrevistas anteriores, a menudo se lo dije al entrevistador. Cuando me convertí en entrevistadora, descubrí por qué estos niños tenían la respuesta. La mayor parte de la información en Internet también decía esto. La memorización de memoria directamente como esta ciertamente no es buena, volvamos a la era original de la computadora.

¿Cómo fue la era de la informática original?

En esa época, los programadores colocaban el programa escrito en la memoria flash y luego lo insertaban en la máquina. El chip calcula a través de la energía eléctrica, luego el chip toma la instrucción de la memoria flash y ejecuta la siguiente ejecución. Una vez que la ejecución en la memoria flash está completa, la computadora está a punto de apagarse

Era flash

En los primeros días, esto se llamaba modelo de una sola tarea, también llamado trabajo (Job).

Con más y más personas, las necesidades y la diversificación de la vida, la oficina, el chat, los juegos, etc., aparecen lentamente. En este momento, tienen que cambiar de un lado a otro en la misma computadora. La gente quiere manejar esto sin hilos ni procesos. Problema.

¿Cómo se maneja eso?

Por ejemplo, un juego es un proceso posterior al inicio, pero la presentación de la escena de un juego requiere renderizado de gráficos y redes. Estas operaciones no pueden bloquearse entre sí. Si se bloquean, será muy incómodo quedarse atascado. Siempre siento que el juego es tan bajo. Queremos que se ejecuten al mismo tiempo, por lo que cada parte está diseñada como un hilo, lo que significa que un proceso tiene varios hilos.

Dado que un proceso tiene múltiples subprocesos, ¿cómo lidiar con esta asignación de recursos?

Para iniciar un juego, primero debe almacenar estos parámetros del juego, por lo que se necesitan recursos de memoria. Al realizar acciones como ataques, se deben calcular las diversas instrucciones de acción emitidas, por lo que se requieren recursos informáticos, CPU y algunos archivos deben almacenarse, por lo que también se necesitan recursos de archivos. Dado que los primeros sistemas operativos no tenían el concepto de subprocesos, cada proceso se ejecutaba alternativamente utilizando tecnología de tiempo compartido, y a cada proceso se le permitía comunicarse a través de canalizaciones y otras tecnologías.

Esto se ve perfecto. Después de iniciar un juego, hay tantos procesos. Después de iniciar el juego, ¿puede organizar una tecnología bajo este proceso para que solo asigne recursos de CPU y aparezcan los hilos?

¿Cómo se asigna este hilo?

Después de que se propuso el concepto de subprocesos, también se denominó proceso ligero porque solo se asignaron los recursos informáticos de la CPU.

El hilo se programa a través del sistema operativo, es decir, después de que el sistema operativo crea el proceso, "lleva un hilo" y el programa de entrada del proceso se coloca en el hilo principal. Parece que el sistema operativo está programando el proceso, pero el proceso en realidad está programado Subproceso medio, este subproceso programado directamente por el sistema operativo se denomina subproceso a nivel del núcleo.

Más conocimiento- [ 115 video 139 recurso 59 código fuente 75 orientación profesional] -gratis para recibir aprendizaje

Subprocesos a nivel de kernel y subprocesos a nivel de usuario

Dado que hay subprocesos a nivel de kernel, por supuesto que hay subprocesos a nivel de usuario, que son equivalentes a los subprocesos de programación del sistema operativo. El subproceso principal implementa subprocesos a través de programas. Este es el subproceso a nivel de usuario, generalmente la API Phread en Linux . Ahora que estamos hablando del modo kernel y el modo usuario, echemos un vistazo a las funciones de los dos.

Hilo de modo de usuario

Se crea completamente en el espacio del usuario y desconoce el sistema operativo. Las ventajas de los hilos a nivel de usuario son las siguientes:

  • Bajo costo de cambio: el espacio del usuario lo mantiene por sí mismo, no es necesario seguir la programación del sistema operativo
  • Baja sobrecarga de administración: las llamadas al sistema no se utilizan para la creación y destrucción, y el cambio de contexto causado por las llamadas al sistema se explicará a continuación

¿Cuáles son las desventajas de los subprocesos en modo de usuario?

  • El costo de comunicarse con el kernel es alto: debido a que este hilo pasa la mayor parte del tiempo en el espacio del usuario, es difícil aprovechar las ventajas del kernel si se realizan operaciones de E / S y se requieren cambios frecuentes de modo de usuario y modo de kernel.
  • Problemas con la colaboración entre subprocesos: imagine que dos subprocesos A y B necesitan comunicarse. La comunicación generalmente implica operaciones IO y las operaciones IO implican llamadas al sistema. Las llamadas al sistema tendrán que cambiar los costos entre el modo de usuario y la suite del kernel.
  • El sistema operativo no puede optimizar la programación de subprocesos: si un subproceso en modo de usuario de un proceso está bloqueado, el sistema operativo no puede detectar y manejar el problema de bloqueo a tiempo, no cambiará otros subprocesos y causará desperdicio

Hilo en modo kernel

Los subprocesos en modo kernel se ejecutan en modo kernel . Generalmente, un subproceso a nivel de kernel se crea a través de llamadas al sistema. ¿Cuáles son las ventajas?

  • Optimización a nivel del sistema operativo: incluso si los subprocesos en el kernel realizan operaciones IO, no necesitan realizar llamadas al sistema. Un bloque del kernel permite que otros se ejecuten inmediatamente
  • Aproveche al máximo el multinúcleo: la autoridad del kernel es lo suficientemente alta como para ejecutar subprocesos del kernel en múltiples núcleos de CPU

¿Cuáles son las desventajas de los subprocesos a nivel de kernel?

  • El costo de creación es relativamente alto: al crear, debe usar la llamada al sistema para cambiar al modo kernel
  • Alto costo de cambio: se requiere la operación del kernel al cambiar
  • Escalabilidad deficiente: debido a la gestión del kernel, el número de pits es limitado y es imposible tener demasiados

¿Cuál es la relación de mapeo entre los subprocesos en modo de usuario y los subprocesos en modo kernel ?

Como se mencionó anteriormente, tanto los subprocesos en modo de usuario como los subprocesos en modo kernel tienen deficiencias. Los subprocesos en modo de usuario son baratos de crear y no pueden usar múltiples núcleos. Los subprocesos en modo kernel son costosos de crear. Aunque se pueden usar múltiples núcleos, la velocidad de conmutación es lento. Por lo tanto, algunos subprocesos generalmente se reservan en el kernel y se usan repetidamente. Hasta ahora, han aparecido las siguientes relaciones de mapeo

Uno de los mapeos entre el modo de usuario y el modo de kernel: muchos a uno

Dado que el costo de crear subprocesos del kernel es alto, somos múltiples subprocesos de múltiples procesos en modo de usuario y multiplexamos un subproceso en modo kernel, pero tales subprocesos no pueden ser concurrentes, por lo que este modelo tiene muy pocos usuarios.

 

 

Subproceso en modo de usuario y subproceso en modo kernel muchos a uno

Mapeo de modo de usuario y modo de kernel dos-uno a uno

Deje que cada subproceso de modo de usuario asigne un subproceso de modo de kernel separado, y cada subproceso de modo de usuario crea un subproceso de kernel vinculado a través de llamadas al sistema. Este modelo se puede ejecutar simultáneamente y aprovechar al máximo las ventajas de la tecnología multi-core. El famoso Windows NT usa este Este modelo, pero si hay más subprocesos, demasiada presión sobre el kernel

 

 

Subproceso en modo de usuario y subproceso en modo kernel uno a uno

Mapeo del estado del usuario y del estado del kernel de tres a muchos

Es decir, n subprocesos en modo de usuario corresponden a m subprocesos en modo kernel. m es generalmente menor o igual que n, y m generalmente se establece en el número de núcleos. Esta relación de muchos a muchos reduce los subprocesos del kernel y completa la concurrencia. Este modelo es adoptado por Linux

 

 

Subproceso en modo de usuario y subproceso en modo kernel de muchos a uno subproceso en modo de usuario y subproceso en modo kernel muchos a muchos

Una computadora iniciará muchos procesos, el número de los cuales, por supuesto, es mayor que el número de CPU, por lo que tenemos que dejar que las CPU se les asignen a su vez, dándonos la ilusión de la ejecución simultánea de múltiples tareas. ¿Qué hará la CPU antes de que se ejecuten estas tareas?

Dado que la CPU quiere ejecutarlo, está obligado a saber dónde cargarlo y dónde comenzar a ejecutarlo, es decir, el sistema necesita configurar los registros de la CPU y el contador de programa con anticipación .

¿Cuáles son los registros y contadores de programas a sus ojos?

Es una memoria pequeña pero poderosa y rápida. El contador de programa se utiliza para registrar la ubicación de las instrucciones que se ejecutan El entorno en el que estas CPU necesitan depender es el contexto de la CPU. Si se conoce el contexto, el cambio de CPU es fácil de entender.

Guarde el contexto de la CPU de la tarea anterior, cargue el contexto de la nueva tarea en el registro y el contador del programa, y ​​luego salte a la ubicación apuntada por el contador del programa. Según las diferentes tareas, se divide en contexto de proceso y contexto de hilo.

Más conocimiento- [ 115 video 139 recurso 59 código fuente 75 orientación profesional] -gratis para recibir aprendizaje

Cuando un proceso se ejecuta en el espacio de usuario, se llama modo de usuario, y cae en un modo de kernel llamado proceso en el espacio de kernel.Si un proceso en modo de usuario desea cambiar al modo de kernel, se puede hacer mediante llamadas al sistema. El proceso es programado por el kernel y el cambio de proceso ocurre en el modo kernel.

¿Qué datos contiene el contexto del proceso?

Dado que el proceso de conmutación se produce en el estado del kernel, el contexto del proceso incluye no solo los recursos del espacio del usuario, como la memoria virtual, las pilas y las variables globales, sino también el estado del espacio del kernel, como la pila y los registros del kernel.

El contexto de guardado y el contexto de restauración aquí no son gratuitos, requiere que el kernel se ejecute en la CPU para completar

 

 

Guardar contexto

Cambio de contexto de hilo

Al ver esto, definitivamente puede dejar escapar la diferencia entre los dos es que el hilo es la unidad básica de programación y el proceso es la unidad básica de propiedad de los recursos. Para decirlo sin rodeos, la programación de tareas del kernel en realidad programa subprocesos, y el proceso solo proporciona recursos como memoria virtual y variables globales para el subproceso, por lo que esta comprensión puede ser mejor:

  • Si el proceso tiene solo un hilo, entonces el proceso se considera un hilo
  • Si el proceso tiene varios subprocesos, varios subprocesos compartirán los mismos recursos, como la memoria virtual y las variables globales, y el cambio de contexto no afectará estos recursos.
  • El hilo tiene sus propios datos privados, como la pila y los registros, que deben guardarse con anticipación cuando se cambia de contexto

En resumen, el cambio de contexto de hilo se dividirá en dos partes

  • Dos subprocesos no pertenecen al mismo proceso, por lo que los recursos no se comparten, por lo que el proceso de cambio implicará el cambio de contexto del proceso.
  • En el segundo caso, los dos hilos pertenecen al mismo proceso. Debido a que la memoria virtual es compartida, estos recursos permanecen intactos cuando se cambia, solo los datos privados del hilo y otros datos no compartidos deben cambiarse

Esto también muestra desde el lado que la conmutación de subprocesos dentro de un proceso ahorrará una gran cantidad de recursos que la conmutación entre múltiples procesos. Esto también es una ventaja de la multiproceso que reemplaza gradualmente a múltiples procesos.

Entonces, ¿cómo se ejecuta la llamada al sistema ?

Es realmente un enlace tras otro. ¿Es como una entrevista? Sí, deberíamos hacer todo lo posible para que el entrevistador se enganche cada vez que respondamos al entrevistador y nos preguntemos si podemos responder la pregunta.

Si el programa en modo de usuario necesita ejecutar llamadas al sistema, debe cambiar a la ejecución en modo kernel. Este proceso se muestra en la siguiente figura, una imagen vale más que mil palabras

 

 

Procedimiento de llamada al sistema

Dado que está dividido en modo de usuario y modo de kernel, los niveles de permiso de los dos no son los mismos. El programa de modo de usuario inicia una llamada al sistema, porque involucra problemas de permisos y tiene que involucrar instrucciones privilegiadas, por lo que se ejecutará por interrupción , como se muestra en la figura anterior.

Después de que ocurre una interrupción, el programa del kernel comienza a ejecutarse, y cuando se completa el procesamiento, se activa una trampa para cambiar al modo de trabajo de usuario. Aquí nuevamente, las interrupciones están involucradas. Entendamos brevemente las interrupciones en este artículo.

¿Qué hizo la interrupción?

Tomemos como ejemplo el teclado que solemos tocar. Cuando presionamos el teclado, la placa base notificará a la CPU después de recibir la tecla. La CPU puede estar ocupada procesando otros programas en este momento. Primero debes interrumpir el programa que se está ejecutando. , y luego salte el puntero de la PC a fijo Esta es una breve descripción de una interrupción.

Sin embargo, nuestras diferentes combinaciones de teclas corresponden a diferentes eventos, por lo que debemos juzgar dónde salta el puntero de la PC según el tipo de interrupción. La ubicación del puntero de la PC es diferente según el tipo de interrupción, por lo que se clasifica. Este tipo se llama Es el código de identificación de la interrupción. La CPU sabe a qué dirección saltar para el procesamiento a través del puntero de la PC. Esta dirección se denomina tabla de vectores de interrupción.

Por ejemplo, utilice el número 8 para representar el código de identificación del tipo de interrupción de tecla A y el número 9 para representar el código de identificación del tipo de interrupción B. Cuando ocurre una interrupción, la CPU necesita saber a qué dirección apunta el puntero de la PC, y esta dirección es el vector de interrupción.

Supongamos que configuramos 255 interrupciones, numeradas de 0 a 255. En una máquina de 32 bits, se necesita casi 1k de direcciones de memoria para almacenar el vector de interrupciones. El espacio de 1k aquí es la tabla de vectores de interrupciones.

Por lo tanto, cuando la CPU recibe una interrupción, opera el puntero de la PC de acuerdo con el tipo de interrupción, encuentra el vector de interrupción, modifica el vector de interrupción e inserta instrucciones para realizar la función de salto.

Aparecen procesos e hilos, entonces, ¿cómo programar ?

Los recursos informáticos son limitados. Demasiados procesos consumen máquinas. Naturalmente, no podemos soportarlo. Los humanos somos iguales. Nuestros estómagos también son limitados. Si no comemos, entraremos en pánico, pero si comemos demasiado mucho, nuestros pies temblarán Encuentra una manera de lidiar con este problema. Con un movimiento de ambas manos, dado que nuestra CPU tiene un número limitado de núcleos, ¿qué tal si asignamos un intervalo de tiempo a cada proceso, lo ponemos en cola para su ejecución y deja que otro proceso se ejecute directamente después del tiempo dado?

¿ Así es la distribución de los intervalos de tiempo?

Suponga que hay tres procesos en este momento, el proceso 1 solo necesita 2 segmentos de tiempo, el proceso 2 necesita 1 segmento de tiempo y el proceso 3 necesita 3 segmentos de tiempo. A la mitad del proceso 1, estoy cansado y no quiero ejecutarlo más. Me tomaré un descanso (colgando). El proceso 2 se ejecutará. El proceso 2 se ejecutará tan pronto como se ejecute un transbordador. El proceso 3 se ejecutará inmediatamente. 1 Inicie la ejecución, de modo que el bucle se ejecute de acuerdo con el intervalo de tiempo, es decir, la tecnología de tiempo compartido

 

 

Tecnología de tiempo compartido

Acabo de hablar sobre el estado del proceso, entonces, ¿qué son los estados?

El ciclo de un proceso generalmente se divide en los siguientes tres estados

  • Estado listo: una vez creado el proceso, comenzará a hacer cola, esta vez se denomina "estado listo"
  • Estado de ejecución: cuando todo está listo, la hora y el lugar son favorables, y la ejecución comenzará, y está en el "estado de ejecución".
  • Si se agota el intervalo de tiempo, volverá a estar listo

 

 

Listo para correr

Si el proceso está esperando la finalización de un proceso, entrará en un estado de bloqueo en este momento

 

 

Proceso bloqueado

¿Por qué se requiere el estado de bloqueo?

Pensemos en ello, a veces la computadora no puede responder a nuestra solicitud por varios motivos, tal vez porque está esperando el disco, o puede ser porque está esperando la impresora. Después de todo, no siempre satisfará nuestras necesidades a tiempo , por lo que nos dice a través de una interrupción en este momento. CPU, la CPU pasa el control al sistema operativo mediante la ejecución del controlador de interrupciones, el sistema operativo luego cambia el estado del proceso bloqueado al estado listo, se arregla para volver a la cola, más porque el proceso entra en estado bloqueado, no hay nada que hacer, pero no se puede encoger, déjelo ir a la cola (porque necesita esperar la interrupción), para que entre en estado de bloqueo.

El siguiente es un resumen de los tres estados mencionados anteriormente.

  • Estado listo (Listo): se puede ejecutar, pero otros procesos se detienen temporalmente en funcionamiento
  • En ejecución: en este momento, el proceso ocupa la CPU
  • Estado de bloqueo (bloqueo): en este momento, puede dejar de ejecutarse debido a la espera de eventos relacionados (solicitud de E / S / espera de finalización de E / S, etc.). En este momento, incluso si se le da el control de la CPU, todavía no se puede ejecutar

De hecho, el proceso tiene dos estados básicos

  • Estado de creación (Nuevo): Estado en el que se acaba de crear el proceso pero no se ha enviado, la función principal es asignar y establecer bloques de control de procesos y otras tareas de inicialización. El proceso de creación tiene dos etapas: la primera etapa consiste en crear la información de gestión necesaria para el nuevo proceso. La segunda etapa es hacer que el proceso entre en estado listo
  • Estado de terminación (salida): el estado en el que el proceso sale, es decir, se recuperan recursos distintos del bloque de control del proceso. También se divide en dos etapas, la primera etapa es esperar a que el sistema operativo funcione después, y la segunda etapa es liberar la memoria principal

Por lo tanto, se incluyen un total de cinco estados. Para ser más intuitivo, el diagrama de transición es el siguiente

 

 

Cinco formas

  • Nulo ----> Estado creado: el primer estado creado inicialmente
  • Crear estado -----> Estado listo: una serie de inicialización se denomina estado listo
  • Estado listo -----> estado en ejecución: cuando el sistema operativo programa un proceso en el estado listo y lo asigna a la CPU, se convierte en el estado en ejecución
  • Estado en ejecución ------> Estado final: el estado de ser terminado por el sistema operativo cuando el proceso completa la tarea correspondiente o comete un error
  • Estado de ejecución ------> Estado de bloqueo: el sistema operativo cambia el proceso al estado listo debido a que se agotó el intervalo de tiempo
  • Estado de bloqueo -------> Estado listo: el proceso de estado de bloqueo espera el final de un evento para ingresar al estado listo

De hecho, no es una venta masiva, en realidad hay dos estados, suspensión lista y suspensión de bloqueo, luego veamos la diferencia entre los dos

  • La suspensión es un comportamiento y el bloqueo es el estado del proceso.
  • La causa de la suspensión del proceso generalmente se debe a memoria insuficiente o solicitud del usuario, modificación del proceso, etc., y el bloqueo del proceso es que el proceso está esperando que ocurra un evento, que puede estar esperando recursos o respuesta.
  • La suspensión corresponde a la activación del comportamiento. El proceso en la memoria externa se transfiere a la memoria, y el proceso en el estado bloqueado necesita esperar a que otros procesos o el sistema se active.
  • La suspensión es un comportamiento pasivo, el proceso se ve obligado a transferir de la memoria a la memoria externa y el bloqueo de entrada es un comportamiento activo.

En resumen, ahora nuestro mapa de procesos se ha convertido en siete estados, de la siguiente manera

 

 

Siete estados del proceso

Los principios subyacentes de procesos e hilos

Arriba comprendemos el origen de los procesos, los subprocesos y las transiciones de estado, pero obviamente no puedo permitirme entender los procesos y los subprocesos libremente. En cuanto a cómo representarlos en la memoria, todavía está relativamente vacío, así que seguimos mirando hacia abajo.

Cómo se representan los procesos e hilos en la memoria

En todo el proceso de diseño, están involucradas dos tablas, a saber, la tabla de proceso y la tabla de subprocesos. La tabla de procesos registrará la ubicación del proceso en la memoria, cuál es su PID, cuál es su estado actual, cuánto espacio le asigna la memoria y a qué usuario pertenece. Suponiendo que no existe tal tabla, la operación El sistema no sabe qué procesos están allí. No sé cómo programarlos. Es como perder XXX y no saber la dirección.

 

 

Tabla de progreso

Especialmente es necesario prestar atención a varias partes de la tabla de proceso.

  • Información de recursos

La información de recursos registrará qué recursos tiene el proceso, como cómo se asignan el proceso y la memoria virtual, qué archivos son de propiedad, etc.

  • Disposición de la memoria

Hay demasiados puntos de conocimiento en la memoria. Si escribes un artículo aquí, será muy largo, así que planeo usar un artículo separado para escribir.

En Linux, el sistema operativo utiliza tecnología de gestión de memoria virtual para hacer que los procesos tengan espacio de memoria virtual independiente. La razón es relativamente sencilla. La memoria física no es suficiente e insegura (los usuarios no pueden acceder directamente a la memoria física). El uso de memoria virtual no solo es más seguro y más seguro. Puede utilizar un espacio de direcciones más grande que la memoria física.

Además, en un sistema operativo de 32 bits, el espacio de direcciones de proceso de 4 GB se divide en dos partes, espacio de usuario y espacio de kernel. El espacio de usuario es 0 ~ 3G y el espacio de direcciones del kernel ocupa 3 ~ 4G. Los usuarios no pueden manipular directamente la dirección virtual del espacio del kernel., Solo a través de llamadas al sistema para acceder al espacio del kernel.

El sistema operativo le dirá al proceso cómo usar la memoria, dividida aproximadamente en qué áreas y qué hace cada área. Describa brevemente la función de cada segmento en la figura siguiente.

  • Pila: el sistema asigna y libera automáticamente los valores de los parámetros de la función, las variables locales, las direcciones de retorno, etc.que se utilizan a menudo aquí.
  • Montón: almacena datos asignados dinámicamente, que generalmente son administrados por el desarrollador. Si el desarrollador no los libera después de su uso, el sistema operativo puede recuperarlos después de que finalice el programa.
  • Segmento de datos: se almacenan variables globales y variables estáticas. La sección de datos inicializados (.data) almacena las variables globales y las variables estáticas que se inicializan, y la sección de datos no inicializados, que generalmente se denomina sección BSS (.bss), almacena las variables globales y las variables estáticas que no se han inicializado.

 

 

Disposición de la memoria de proceso

  • Descripción

La información de descripción incluye el número de identificación único del proceso, el nombre del proceso y el usuario, etc.

Además de disponer una mesa para el proceso, también se dispone una mesa para el hilo, que es la mesa del hilo. La tabla de subprocesos también contiene un ID, que se llama ThreadID, y también registra su propio estado en diferentes etapas, como bloqueado, en ejecución y listo. Dado que varios subprocesos compartirán la CPU y deberán cambiar constantemente, es necesario registrar los valores del contador y los registros del programa.

Hablando de subprocesos a nivel de usuario y subprocesos a nivel de kernel, ¿qué tan cercana es la relación entre los dos?

¿Cómo expresar la relación entre las dos asignaciones?

Se puede imaginar que hay un grupo de subprocesos en el kernel, que se le da al espacio de usuario.Cada vez que un subproceso a nivel de usuario pasa el contador del programa, etc., después de que se completa la ejecución, el subproceso del kernel no se destruye y espera la siguiente tarea. A partir de esto, se puede ver que el proceso de creación es costoso, el costo es alto, la sobrecarga de creación del hilo es pequeña y el costo es bajo.

¿Hay tantos procesos que comparten memoria?

Hay demasiados procesos en el sistema operativo. Para permitirles realizar sus funciones y no interferir entre sí, considere asignar áreas de memoria completamente aisladas para ellos. Incluso si el programa lee la misma dirección de memoria en el interior, sus direcciones físicas son realmente diferente. Es como si mi 501 en el Bloque X fuera igual que su 501 en el Bloque Y, pero no es una casa. Este es el espacio de direcciones

Por lo tanto, en circunstancias normales, el proceso A no puede acceder a la memoria del proceso B, a menos que coloque un caballo de Troya, manipule maliciosamente la memoria del proceso B o acceda a ella a través de la comunicación entre procesos, como hablaremos más adelante.

¿Cómo cambia el hilo del proceso?

Es necesario alternar una gran cantidad de procesos del sistema operativo, manteniendo la virtud tradicional de no ser difícil tomar prestado y luego tomar prestado. Antes de cada cambio, debe registrar la dirección de memoria del valor del registro actual, de modo que puede volver a la ubicación original la próxima vez para continuar con la ejecución. Leer de la memoria al reanudar la ejecución y luego reanudar la ejecución del estado

 

 

Cambio de proceso

Para que todos comprendan este proceso en detalle, lo dividiré en los siguientes pasos

  • El sistema operativo detecta que se debe cambiar un proceso y primero envía una señal de interrupción a la CPU para detener el proceso actual.
  • Después de que la CPU recibe la señal de interrupción, el proceso de ejecución se detendrá y el tipo de sistema operativo encontrará una manera de guardar el estado actual primero.
  • Después de que el sistema operativo se haga cargo de la interrupción, ejecute una sección del ensamblador para ayudar a registrar el estado del proceso antes
  • Cuando el sistema operativo guarda el estado, ejecutará el planificador y dejará que decida el siguiente proceso a ejecutar.
  • Finalmente, el sistema operativo ejecutará el siguiente proceso

 

 

Procesar e interrumpir

Cómo restaurar el proceso anterior después de la interrupción

Como se mencionó anteriormente, el sistema operativo ejecutará un fragmento de código para ayudar al proceso a restaurar su estado. Uno de sus métodos de implementación es la estructura de datos primero en entrar, último en salir de la pila, así que bien, los cursos básicos en las universidades son realmente importante.

Después de que se interrumpe el proceso (subproceso), el sistema operativo es responsable de insertar datos clave (como registros) en la pila. Al reanudar la ejecución, el sistema operativo es responsable de salir de la pila y restaurar el valor del registro.

Corutina

La primera vez que entré en contacto con coroutine fue en un proyecto de conducción autónoma.Los compañeros que trabajaban juntos dijeron que se usaba coroutine en la parte inferior de la biblioteca, y yo parecía confundido, ¿eh? Ctrip? ¿Listo para hacer las maletas y volver a casa? Lo pensé durante mucho tiempo. Había una biblioteca de bajo nivel que usaba corrutinas. En ese momento, estaba atónito. El proceso y los hilos eran suficientes para arrojar a la gente. ¿Cómo es que otra corrutina? Me preguntaba si habría más entrevistadores. Pensamientos de hacer preguntas

  • Que es una corrutina
  • ¿Cuál es la diferencia entre corrutina y proceso, hilo
  • ¿Cuáles son las ventajas y desventajas de las corrutinas?

¿Cómo puedes romperte la cabeza si no está calva? Está bien, por el bien de la vida, no, me encantan las computadoras y no puedo detener el ritmo del aprendizaje, veamos qué es esto

¿Por qué necesitamos corrutinas?

Cuando realizamos múltiples tareas, generalmente usamos subprocesos múltiples para ejecutar simultáneamente. Tomemos como ejemplo la reciente promoción popular de comercio electrónico Moutai. Independientemente de si Moutai está en la caché o en los datos de back-end, el número inicial de usuarios es 10. Siempre que se reciben 10 mensajes de pago, se abren 10 hilos para realizar consultas. la base de datos. En este momento, la cantidad de usuarios es pequeña y pueden regresar inmediatamente. Al día siguiente, la cantidad de usuarios aumentará a 100. Si se utilizan 100 hilos para realizar consultas, el efecto es realmente bueno. Aumente el esfuerzo de promoción Cuando hay 1000 personas al mismo tiempo, se siente un poco difícil.

 

 

Hilo creciente

1000-10000, después de leer el contenido anterior, debe quedar claro que crear y destruir subprocesos consume muchos recursos. Suponiendo que cada subproceso ocupa 4M de espacio de memoria, entonces 10000 subprocesos consumirán alrededor de 39G de memoria, pero el servidor también tiene 8G de memoria.

La solución en este momento aumenta el servidor o mejora la eficiencia del código. Cuando varios subprocesos están realizando operaciones, es inevitable que un subproceso determinado esté esperando IO. En este momento, bloqueará el subproceso actual para que no cambie a otros subprocesos, de modo que otros subprocesos se ejecutarán como de costumbre. No hay problema cuando hay menos subprocesos. Cuando aumenta el número de subprocesos, surgirán problemas. El aumento en el número de subprocesos no solo ocupa una gran cantidad de espacio de memoria, sino que también el cambio de demasiados subprocesos también ocupará mucho tiempo del sistema.

 

 

Hilo de arriba

En este punto, este problema puede resolverse mediante una corrutina

La corrutina se ejecuta en el hilo. Una vez ejecutada la corrutina, puede optar por abandonar y dejar que otra corrutina se ejecute en el hilo actual. Es decir, la corrutina no aumenta el número de subprocesos, sino que ejecuta múltiples corrutinas a través del tiempo compartido y la multiplexación sobre la base de subprocesos. El punto clave es que su conmutación se produce en modo de usuario, y no hay modo de usuario para Cambio de modo de kernel, menor costo

 

Más conocimiento- [ 115 video 139 recurso 59 código fuente 75 orientación profesional] -gratis para recibir aprendizaje

Sobrecarga de corrutina

De manera análoga a lo anterior, solo necesitamos iniciar 100 subprocesos, y luego cada subproceso ejecuta 100 corrutinas para completar el procesamiento simultáneo anterior de 10,000 tareas

Entonces, ¿cuáles son los principales contenidos necesarios en el proceso de uso de la corrutina?

Acabo de decir que la corrutina se ejecuta en el hilo. Si el hilo está bloqueado mientras espera IO, ¿qué pasará en este momento? De hecho, el sistema operativo se ocupa principalmente de los subprocesos. Cuando la corrutina llama al bloqueo de IO, el sistema operativo hará que el proceso se bloquee. En este momento, la corrutina actual y la corrutina enlazada en el subproceso se bloquearán y no podrán programarse. Es incómodo

Por lo tanto, en la corrutina, no puede llamar a la operación que hace que el hilo se bloquee, es decir, la corrutina se combina mejor con E / S asíncrona para ejercer la mayor potencia

¿Cómo lidiar con la operación de bloqueo de llamadas IO en la corrutina?

  • La respuesta corta es que cuando se llama al bloqueo de IO, se reinicia un subproceso para realizar la operación y, una vez que se completa la ejecución, la corrutina lee el resultado. ¿Es esto similar al subproceso múltiple?
  • Encapsule la E / S del sistema y cámbiela a llamada asíncrona. En este momento, se requiere mucho trabajo, por lo que necesita el soporte nativo del lenguaje de programación.

Por lo tanto, no se recomienda utilizar corrutinas para tareas computacionalmente intensivas.Las tareas intensivas en computadora requieren mucho cambio de hilo, y el cambio de hilo implica demasiado intercambio de recursos.

para resumir

Los puntos de conocimiento involucrados en el proceso de subprocesos son muy complicados. Este artículo contiene una serie de puntos de conocimiento tales como subprocesos, qué es un proceso, la diferencia entre los dos, subprocesos a nivel de kernel y subprocesos en modo de usuario, cambio de contexto de procesos de subprocesos , y el proceso de las llamadas al sistema. La programación del proceso se introducirá en detalle.

Supongo que te gusta

Origin blog.csdn.net/Python6886/article/details/112828479
Recomendado
Clasificación