Tengo dos códigos C++ uno llamado a y uno llamado b. Estoy corriendo en un Linux de 64 bits, usando la biblioteca de threading Boost.rendimiento entre diferentes procesos
El código a crea 5 hilos que permanecen en un bucle sin fin realizando alguna operación. El código b crea 5 subprocesos que permanecen en un bucle sin fin que invoca yield().
Estoy en una máquina quadcore ... Cuando invoco el código a solo, obtiene casi el 400% del uso de la CPU. Cuando se invoca el código b solo, obtiene casi el 400% del uso de la CPU. Ya lo esperaba.
Pero cuando se ejecutan los dos juntos, yo estaba esperando que el código b utiliza casi nada de CPU y un utilizar el 400%. Pero, en realidad, ambos están usando partes iguales de la CPU, casi el 200%.
Mi pregunta es, no cede() funciona entre diferentes procesos? ¿Hay alguna manera de hacerlo funcionar de la manera que esperaba?
No tengo una respuesta, y creo que su pregunta es interesante porque sched_yield afirma poner el proceso en la parte posterior de la cola de ejecución, pero esto podría ser interesante para usted en términos de poner en duda la utilidad real de utilizando sched_yield: http://kerneltrap.org/Linux/Using_sched_yield_Improperly – Kevin
Este fragmento de libro implica que la versión de su kernel de Linux importa: http://books.google.com/books?id=k_ocKY0iegsC&pg=PA168&lpg=PA168&dq=sched_yield+ a + otro + proceso & fuente = bl & ots = VgCNK6kGIu & sig = gyduzTS_2EY8v8wwwAE8MScSLsg & hl = en & ei = 68N7TqfOCcXPiAK6qrDVBw & sa = X & oi = book_result & ct = resultado & resnum = 3 & ved = 0CCgQ6AEwAg # v = onepage & q = sched_yield% 20to% 20another% 20process & f = false – Kevin