¿Cuál es la forma más eficiente de CPU de "perder tiempo" en un hilo?

Tengo una serie de subprocesos (100) que se ejecutan durante unos segundos a la vez. Cuando están ejecutando, pasan una cantidad significativa de ese tiempo esperando una respuesta de otro sistema (un dispositivo en serie). Soy consciente de que tener 100 subprocesos ejecutándose a la vez podría ser un gran recurso, por lo que en realidad limito el número de subprocesos que pueden comenzar en cualquier momento.

Sin embargo, se me ocurre que debe haber formas buenas y malas de esperar un evento externo dentro de un hilo. ¿Es este enfoque intensivo en CPU?:

send command ;
repeat
until response arrived ;
process response ;    

¿Y este enfoque lo hace más eficiente?:

send command ;
repeat
    Sleep (20) ;
until response arrived ;
process response ;  

* INFORMACIÓN ADICIONAL

El entorno es x86 Windows XP. El código de subproceso es una serie larga e involucrada de interacciones con un dispositivo en serie, pero en general, consiste en escribir caracteres en un puerto COM (usando la biblioteca en serie AsyncFree) y esperar que los caracteres sean devueltos al acampar en el búfer de caracteres entrantes y procesándolos cuando llegan. Me imagino que la biblioteca en serie hace que el dispositivo lea y escriba. El tiempo en el hilo puede ser tan largo como un minuto, o tan corto como un par de segundos, pero la mayor parte de ese tiempo se pasa esperando que los caracteres salgan del puerto, o esperando los caracteres de respuesta (la velocidad de transmisión es lenta), de ahí mi pregunta sobre la mejor manera para que el hilo se comporte mientras está esperando. Actualmente estoy llamando aSleep en un bucle esperando aCharactersInBuffer para que no sea cero, procesando cada carácter cuando llega y saliendo del hilo cuando tengo la respuesta completa. Entonces el código se parece más a (ignorando el manejo de los tiempos de espera, etc.):

send command ;
Packet = '' ;
repeat

    repeat
        Sleep (20) ;
    until response character arrived ;
    build Packet

until complete packet arrived
process response ;  

Respuestas a la pregunta(3)

Su respuesta a la pregunta