Какой способ «тратить время» на поток наиболее эффективен для ЦП?

У меня есть несколько потоков (100), каждый из которых выполняется по несколько секунд за раз. выполняются, они тратят значительную часть этого времени на ожидание ответа от другой системы (последовательного устройства). Я помню, что одновременное выполнение 100 потоков может потреблять ресурсы, поэтому я фактически ограничиваю количество потоков, которые могут запускаться в любой момент.

Мне приходит в голову, что должны быть хорошие и плохие способы ожидания внешнего события внутри потока. Является ли этот подход интенсивным для ЦП?:

send command ;
repeat
until response arrived ;
process response ;    

и делает ли этот подход более эффективным ?:

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

* ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ *

Среда - x86 Windows XP. Код потока представляет собой длинную и включает серию взаимодействий с последовательным устройством, но в целом он состоит из записи символов в COM-порт (с использованием AsyncFree serial library) и ожидая возврата символов, используя i буфер входящих символов и обработка их по прибытии. Я полагаю, что последовательная библиотека позволяет устройству читать и писать. Время в потоке может составлять минуту или пару секунд, но большую часть этого времени тратится на ожидание выхода символов из порта или ожидание символов ответа (скорость передачи низкая), отсюда и мой вопрос о том, как поток ведет себя во время ожидания.В настоящее время я вызываю Sleep в цикле, ожидая, пока CharactersInBuffer станет ненулевым, обрабатывая каждый символ, когда он поступает, и выхожу из потока, когда я получаю полный ответ. Таким образом, код больше похож (без учета обработки тайм-аутов и т. Д.):

send command ;
Packet = '' ;
repeat

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

until complete packet arrived
process response ;  
11
задан rossmcm 1 November 2011 в 23:35
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: