idioma ir modelo de programación MPG

Antes de buscar en el momento planificador Go, tenemos que entender por qué lo necesita, ya que podríamos pensar, núcleo del sistema operativo ya no es un programador de subprocesos Bueno?
API POSIX personas familiarizadas saber, programas POSIX en gran medida un enfoque de modelo de proceso UNIX es una descripción lógica y extensión, ambos tienen muchas similitudes. Hilo tiene su propia máscara de señales, la afinidad de la CPU y así sucesivamente. Pero muchas características del programa Go por tanto engorroso. consume tiempo cambio de contexto contexto particular. Otra razón es que la necesidad de recolección de basura a ir todo goroutine detuvo por lo que la memoria en un estado coherente. Basura punto de recogida en el tiempo es incierto, si el sistema operativo se basa en su propio programador de horario, entonces habrá un gran número de hilos que dejar de trabajar.
GO era un programador de desarrollo separado puede saber cuando su estado de memoria es el mismo, es decir, cuando comenzamos a recoger la basura, corriendo sólo hay que esperar a que el hilo se ejecute en nuclear era en la CPU, en lugar de esperar a que todas las discusiones. Una relación de correspondencia entre el espacio de usuario y el hilo de espacio de núcleo tiene hilo: N: 1,1: 1 y M: N. N: 1 es que los subprocesos de usuario múltiple (N) siempre se ejecutan en un hilo del núcleo, cambio de contexto contexto muy rápido, pero no la verdadera ventaja de varios núcleos. 1: 1 es que un hilo de usuario para ejecutarse únicamente en un hilo del núcleo, entonces usted puede tomar ventaja de varios núcleos, pero cambio de contexto muy lento. M: N es decir, goroutine varios subprocesos para ejecutarse en múltiples núcleos, esto parece ser un conjunto de las anteriores ventajas de ambos, pero aumentará la dificultad de la programación.
Aquí Insertar imagen Descripción
Ir dentro del planificador tiene tres importantes estructural: M, P, G
H: representa los hilos del núcleo del sistema operativo real, y hebras de POSIX en la gente casi real de trabajo
G: representa un goroutine, que tiene su propia pila, la instrucción puntero y otra información (a la espera de canal, etc.), para la programación.
P: programación en nombre del contexto, puede ser visto como un programador local, así que vaya a ejecutar el código en un hilo, que se consigue a partir de la N: 1 a N: asignación de teclas M.
Aquí Insertar imagen Descripción

La figura visto, hay dos hilos M físicas, cada M tiene un contexto (P), cada uno también tienen un goroutine ejecución.
El número de P puede ser establecido por GOMAXPROCS (), que de hecho representa un verdadero grado de concurrencia, es decir, cuántos goroutine puede ejecutar simultáneamente. figura gris goroutine que no funciona, pero listo para el estado de preparado, que están esperando a ser programado. P mantiene la cola (llamado cola de ejecución), el lenguaje Go, iniciar una goroutine es fácil: la función de ir en la línea, por lo que tener un ir se ejecuta cada instrucción, se unió a una cola de ejecución goroutine cola en el final de su siguiente punto de la programación, retirarla (cómo decidir qué tomar goroutine?) de cola de ejecución en una ejecución goroutine.
¿Por qué mantener múltiples contextos P? Debido a que el sistema operativo cuando un hilo se bloquea, P puede en cambio desertado a otro hilo OS! Vemos la figura, cuando una hebra de OS están obstruyendo M0, en lugar de P ejecutar en la hebra de OS M1. El planificador para asegurar que haya suficientes subprocesos para ejecutar todo el contexto P.

Aquí Insertar imagen Descripción
M1 cifra puede haber sido creado, o eliminado de la memoria caché de hilo. Cuando los rendimientos MO, se deben tratar de conseguir un goroutine contexto p para ejecutar, en circunstancias normales, sería de otras hebras de SO donde roban robar un contexto aquí, si no lo robé, lo puso en una cola de ejecución global en goroutine y luego se fue a la cama a sí mismo un gran sueño (en el cache de procesos). Los contextos también se comprueban periódicamente la cola de ejecución global, de lo contrario goroutine en la cola de ejecución global nunca ejecutado.
Aquí Insertar imagen Descripción
Otro caso se le asigna la tarea P G terminó de realizarse con rapidez (distribución irregular), lo que conduce a un sistema sequedad P contexto inactivo bien, pero cualquier curso ocupado. Pero si no hay tarea cola de ejecución global de G, entonces P tendría que recoger a algún otro contexto G de P a actuar allí. En general, si el contexto de otro contexto P P allí para robar una tarea, entonces, en general, 'robar' carrera media de la cola, que asegura que cada hilo OS puede utilizar completamente.

Publicados 158 artículos originales · ganado elogios 119 · vistas 810 000 +

Supongo que te gusta

Origin blog.csdn.net/u013474436/article/details/103746178
Recomendado
Clasificación