domingo, 13 de abril de 2014

Detener un Thread temporalmente: Runnable - Not Runnable - Part 1

El sistema operativo se ocupa de asignar tiempos de CPU a los distintos threads que se estén ejecutando simultáneamente. Aun en el caso de disponer de un ordenador con más de un procesador (2 ó más CPUs). el número de threads simultáneos suele siempre superar el| número de CPUs. por lo que se debe repartir el tiempo de forma que parezca que todos los procesos corren a la vez (quizás más lentamente), aun cuando sólo unos pocos pueden estar ejecutándose en un instante de tiempo. Los tiempos de CPU que el sistema continuamente asigna a los distintos threads en estado nnntable se utilizan en ejecutar el método ruit() de cada thread. Por diversos motivos, un thread puede en un determinado momento renunciar "voluntariamente" a su tiempo de CPU y otorgárselo al sistema para que se lo asigne a otro thread. 
Esta "renuncia" se realiza mediante el método yieldf). Es importante que este método sea utilizado por las actividades que tienden a "monopolizar" la CPU. El método yieldQ viene a indicar que en ese momento no es muy importante para ese thread el ejecutarse continuamente y por lo tanto tener ocupada la CPU. En caso de que ningún thread esté requiriendo la CPU para una actividad muy intensiva, el sistema volverá casi de inmediato a asignar nuevo tiempo al thread que fue "generoso*' con los demás. Por ejemplo, en un Pentium II 400 Mhz es posible llegar a más de medio millón de llamadas por segundo al método yield(). dentro del método run('), lo que significa que llamar al método yieldf) apenas detiene al thread. sino que sólo ofrece el control de la CPU para que el sistema decida si hay alguna otra tarea que tenga mayor prioridad.

No hay comentarios:

Publicar un comentario