2011-03-29 37 views
5

Estoy pensando en desarrollar una aplicación que, en una máquina de seis núcleos, ejecute seis tareas asíncronas, una en cada núcleo.¿Hay alguna forma de bloquear un proceso en una CPU?

¿Pero es posible bloquear las tareas en su propio núcleo?

La idea es que se ejecuten principalmente solos, pero a veces se comunican en un área de memoria compartida. Sin embargo, quiero que las tareas se ejecuten lo menos perturbadas posible.

+1

¿Estás realmente seguro de que va a hacer un mejor trabajo que el programador de decidir qué CPU debe ejecutar cada tarea? :-) –

+0

@R .., no estoy seguro, pero tengo una buena corazonada. La razón es que hay exactamente 6 cosas que hacer, y deben ejecutarse de la manera más ininterrumpida posible, de forma asíncrona. –

Respuesta

7

El concepto que está buscando se llama "afinidad de hilos". Cómo se implementa y las interfaces para solicitarlo son específicas del sistema operativo.

En Linux, intente sched_setaffinity(). glibc también puede ofrecer pthread_attr_setaffinity_np().

5
taskset -c cpunum yourprocess 

hace lo que quiere. En su lugar, es posible suministrar PID, de esta manera puede establecer subprocesos individuales en una CPU. Si desea cambiar la afinidad de la CPU de su propio programa, use sched_setaffinity().

0

Sólo por los registros, otro método, que no impliquen la programación: Abrir el Administrador de tareas, ir a la pestaña de procesos, haga clic en su proceso y seleccione Establecer afinidad ...

+3

la pregunta está etiquetada Linux - no puede suponer que haya siquiera un mouse conectado, y mucho menos una GUI completa con un "administrador de tareas" – Mat

+0

@Mat Usted tiene toda la razón. De todos modos, esto podría ayudar a otros. – Adi

Cuestiones relacionadas