Multiprocesamiento dentro de un hilo hijo.

Estaba aprendiendo sobre multiprocesamiento y multiproceso.

Por lo que entiendo, los subprocesos se ejecutan en el mismo núcleo, por lo que me preguntaba si crearé múltiples procesos dentro de un subproceso secundario. ¿Estarán limitados a ese único núcleo también?

Estoy usando python, así que esta es una pregunta sobre ese idioma específico, pero me gustaría saber si es lo mismo con otros idiomas.

No soy un experto en pyhton, pero espero que sea como en otros idiomas, porque es una característica del sistema operativo en general.

Proceso

Un proceso es ejecutado por el sistema operativo y posee un hilo que se ejecutará. Esto es, en general, su progtwig. Puede iniciar más hilos dentro de su proceso para realizar cálculos pesados ​​o lo que sea que tenga que hacer. Pero pertenecen al proceso.

Hilo

Uno o más subprocesos son propiedad de un proceso y la ejecución se distribuirá en todos los núcleos.

Ahora a tu pregunta

Cuando creas un número dado de hilos, estos hilos deberían, en general, estar distribuidos en todos tus núcleos. No se limitan al núcleo que está ejecutando el intérprete de phyton. Incluso cuando crea un subproceso desde su código de phyton, el proceso puede y debe ejecutarse en otros núcleos.

Puedes leer más sobre el concepto de Gernal aquí: multitarea preventiva

Hay algunas bibliotecas en diferentes idiomas que abstraen un hilo a algo que a menudo se llama Tarea u otra cosa. Para estos casos especiales, es posible que solo se estén ejecutando dentro del hilo en el que se crearon. Por ejemplo. En el mundo DotNet hay un hilo y una tarea. A menudo, las personas utilizan mal el término hilo cuando hablan de una tarea, que en general se ejecuta dentro del hilo en el que se creó.

Cada progtwig está representado a través de un proceso. Un proceso es el contexto de ejecución en el que operan uno o varios subprocesos. Todos los subprocesos en un proceso comparten el mismo tramo de memoria virtual asignado al proceso.

Python (que se refiere a CPython, por ejemplo, Jython y IronPython no tienen GIL) es especial porque tiene el locking global del intérprete (GIL) , que evita que el código de Python se ejecute en varios núcleos en paralelo. Solo el código que libera el GIL puede funcionar verdaderamente paralelo (operaciones de E / S y algunas extensiones C como el número). Es por eso que tendrá que usar el módulo de multiprocesamiento para el código Python enlazado a la CPU que necesita para ejecutar en paralelo. Los procesos iniciados con el módulo de multiprocesamiento ejecutarán su propia instancia de intérprete de Python para que pueda procesar el código verdaderamente paralelo.

Tenga en cuenta que incluso una aplicación python de un solo subproceso puede ejecutarse en diferentes núcleos, no en paralelo sino de forma secuencial, en caso de que el sistema operativo vuelva a progtwigr la ejecución a otro núcleo después de que haya ocurrido un cambio de contexto.

De vuelta a tu pregunta:

Si creo varios procesos dentro de un subproceso secundario, ¿también estarán limitados a ese núcleo único?

No crea procesos dentro de un subproceso, genera nuevos procesos de python independientes con las mismas limitaciones que el proceso de python original y en el que se ejecutarán los subprocesos de los nuevos procesos depende del sistema operativo (… siempre que no lo haga. No manipule la afinidad del núcleo de un proceso, pero no vayamos allí.