Tengo algunas preguntas sobre la función sched_yield
porque veo que no está funcionando como estaba previsto en mi código. Muchas veces veo que el mismo hilo se ejecuta una y otra vez, incluso en presencia de otros hilos, cuando trato de ceder llamando al sched_yield
.Comportamiento de sched_yield
También si tengo multinúcleos, será sched_yield
rendimiento para hilos que se ejecutan en todos los núcleos, o solo un núcleo. Digamos, por ejemplo, que los hilos 1, 2 y 3 se ejecutan en el núcleo 1 y los hilos 4, 5 y 6 en el núcleo 2 y si se llama al sched_yield
desde el hilo 2, será reemplazado solo por el hilo 1 y 3 o 1, 3. 4, 5 y 6 son todos posibles? Lo estoy preguntando porque en .Net Thread.Yield
solo cede a los hilos que se ejecutan en el mismo núcleo/procesador.
¿Cómo piensas que funcione? TBH, realmente no entiendo por qué esta llamada es útil, ya sea en POSIX/*** X, Windows o cualquier multitarea preventiva. Si cede su hilo, no tiene garantía de que el SO no lo cargue nuevamente de inmediato, quizás en el mismo núcleo si los otros hilos no están listos en ese momento. Si la versión de .NET tiene una afinidad con el procesador (y sí, busqué en Google y parece que sí), eso es aún más extraño. ¿Supongo que podría mejorar el rendimiento con las fibras? –
@MartinJames es una llamada útil cuando tienes más procesos/subprocesos ejecutables que núcleos y quieres dar a los otros subprocesos/procesos la posibilidad de progresar (p. Ej., Un subproceso acaba de otorgar otro subproceso y el costo del el primer hilo que se va a dormir para esperar al finalizar es más que el costo de (el segundo hilo hace el "algo" + el primer hilo comprobando que se ha realizado). – jhfrontz