Según entiendo, el programador de subprocesos de Windows no discrimina entre subprocesos pertenecientes a dos procesos diferentes, siempre que todos tengan la misma prioridad de base. Mi pregunta es si tengo dos aplicaciones, una con solo un hilo y la otra con 50 hilos con la misma prioridad base, ¿significa que el segundo proceso tiene más tiempo de CPU que el primero?Win32 Programación de subprocesos
Respuesta
Eso depende del comportamiento de los hilos. En general, con una diferencia de 50: 1 en el recuento de hilos, sí, la aplicación con más hilos va a tener mucho más tiempo. Sin embargo, Windows también utiliza la priorización dinámica de subprocesos, que puede cambiar esto de alguna manera. priorización hilo dinámico se describe aquí:
http://support.microsoft.com/kb/109228
extracto relevante:
La prioridad de base de un subproceso es el nivel de base de la que se realizan estos ajustes al alza. La prioridad actual de un hilo se llama su prioridad dinámica. Los subprocesos interactivos que ceden antes de que su intervalo de tiempo esté activo tenderán a ajustarse hacia arriba en prioridad desde su prioridad base. Los subprocesos vinculados a la computación que no rinden, consumiendo todo su segmento de tiempo, tenderán a disminuir su prioridad, pero no por debajo del nivel base. Esta disposición a menudo se llama programación heurística. Proporciona un mejor rendimiento interactivo y tiende a disminuir el impacto del sistema de los hilos "CPU hog".
La unidad de programación es un hilo, no un proceso, por lo que un proceso con 50 hilos, todo en un bucle estrecho, recibirá mucho más de la CPU de un proceso con un solo hilo, proporcionan todos son corriendo en la misma prioridad. Esto normalmente no es una preocupación ya que la mayoría de los hilos en el sistema no están en un estado ejecutable y no estarán listos para la programación; están esperando E/S, esperando la entrada del usuario, y así sucesivamente.
Windows Internals es un excelente libro para aprender más sobre el programador de subprocesos de Windows.
La programación en Windows se encuentra en el granularidad de subprocesos. La idea básica detrás de este enfoque es que los procesos no se ejecutan sino que solo proporcionan recursos y un contexto en el que se ejecutan sus subprocesos. Volviendo a su pregunta, porque las decisiones de programación se hacen estrictamente en base a un hilo, no se tiene en cuenta a qué proceso pertenece el hilo. En su ejemplo, si el proceso A tiene 1 subproceso ejecutable y el proceso B tiene 50 subprocesos ejecutables, y los 51 subprocesos tienen la misma prioridad, cada subproceso recibirá 1/51 del tiempo de CPU: Windows no daría el 50 por ciento de la CPU para procesar A y 50 por ciento para procesar B. Para comprender los algoritmos de programación de hilos, primero debe comprender los niveles de prioridad que usa Windows. Puede refer aquí para una referencia rápida.
Intente leer Windows Internals para una comprensión profunda.
La información también está aquí: http://msdn.microsoft.com/en-us/library/ms810029.aspx#irql_sched_topic5 – Mehrdad
Por lo tanto, es justo decir que el programador de subprocesos de Windows utiliza un algoritmo 'justo', p. todos los hilos con el mismo nivel de prioridad tienen la misma probabilidad de ser programados? Si es así, para los mismos subprocesos de nivel de prioridad, ¿cuál está programado primero? ¿Es el orden aleatorio o es determinista de alguna manera? – stt106
Todo lo anterior es preciso, pero si le preocupa que el proceso de 50 hilos acapare toda la CPU, existen técnicas que puede realizar para garantizar que ningún proceso abrume a la CPU.
En mi humilde opinión la mejor manera de hacerlo es utilizar job objects para administrar el uso de un proceso. Primero, llame al CreateJobObject, luego SetInformationJobObject para limitar el uso máximo de CPU de los procesos en el objeto de trabajo y AssignProcessToJobObject para asignar el proceso con 50 hilos al objeto de trabajo. Luego puede dejar que el sistema operativo se asegure de que el proceso de 50 hilos no consuma demasiado tiempo de CPU.
Si hubiera herramientas para que los usuarios finales pudieran utilizarlas, sería una gran victoria para Windows. –
Hay, tipo de. Inicie el administrador de tareas, haga clic derecho en un proceso y seleccione "Establecer afinidad". Esto le permite asignar subprocesos individuales a CPU específicas. No es exactamente lo mismo, pero está cerca. –
Hay una configuración local 'avanzada' que supuestamente se puede utilizar para sombrear la programación ligeramente a favor de la aplicación con enfoque. Con la configuración de 'servicios', no hay preferencia. En versiones anteriores de Windows, esta configuración solía ser algo más granular que solo 'aplicaciones con foco' (ligera preferencia a la aplicación con foco) y 'servicios' (todo igual a la carga)
Como esto puede ser establecido por el usuario en la máquina de segmentación, parece que está pidiendo que la aflicción dependa de esta configuración ...
- 1. programación de Win32 ventana de la consola ocultar
- 2. ¿Algún tutorial para la programación de Win32 SDK?
- 3. ¿Controlar la prioridad de programación de subprocesos de python?
- 4. Recopilación de información sobre la programación de subprocesos en Linux
- 5. Cómo crear un acceso directo mediante programación utilizando Win32
- 6. ¿Cómo se puede aprender la programación paralela de subprocesos múltiples?
- 7. Cambiar la prioridad de subprocesos de subprocesos en Windows
- 8. ¿Cómo crear hilos con Win32 API?
- 9. Sincronización simple de subprocesos
- 10. Cambiando de .NET a desarrollo de Win32
- 11. Forzar la programación de hilos de Win32 a una secuencia definida según la prioridad
- 12. ¿Las ventanas Win32 son seguras?
- 13. sobreasignación de subprocesos de subprocesos de Java
- 14. Subprocesos de aplicación vs Subprocesos de servicio
- 15. Prioridad de subprocesos y precisión de subprocesos
- 16. Ejemplo de cliente HTTP en win32
- 17. Captura de mensajes Win32
- 18. Problema de consola Win32
- 19. Win32 Función de API para habilitar/deshabilitar el dispositivo por programación
- 20. ¿Cómo se implementa la programación basada en eventos de Win32 bajo el capó?
- 21. ¿Qué tan relevante es la programación de Win32 para los profesionales modernos?
- 22. ¿Los subprocesos iniciados por la Biblioteca paralela de tareas actúan como subprocesos de primer plano?
- 23. Volcado de subprocesos mediante programación/JDI (Interfaz de depuración de Java)
- 24. Diseño en el programa GUI de Win32
- 25. Modelo híbrido de subprocesos (M: N) Implementación
- 26. diferencia entre #if defined (WIN32) y #ifdef (WIN32)
- 27. Subprocesos C# - Publicar mensajes entre subprocesos
- 28. se notificará cuando se hayan terminado todos los subprocesos de subprocesos de subprocesos
- 29. Cambiar estilo de ventana Win32
- 30. C control de pestañas win32
¿Y qué pasa si una aplicación tiene 50 procesos y la otra solo tiene una? ¿Debería la primera aplicación obtener más tiempo de CPU? –