«Правильный» способ кодирования производителя / потребителя состоит в том, чтобы потребитель ожидал данных производителя. Вы можете достичь этого с помощью объекта синхронизации, такого как Mutex. Потребитель будет Wait
на мьютексе, который блокирует его выполнение до тех пор, пока данные не станут доступны. В свою очередь, производитель сообщит мьютекс, когда данные будут доступны, что разбудит поток потребителя, чтобы он мог начать обработку. Это более эффективно, чем sleep
с точки зрения обоих:
- загрузка ЦП (циклы не тратятся впустую) и
- Время выполнения (выполнение начинается, как только становятся доступными данные, а не когда запланирован запуск потока).
Тем не менее, вот анализ доходности против сна, который вы просили. Вам может понадобиться использовать такую схему, если по какой-то причине ожидание вывода невозможно:
Это зависит от того, сколько трафика вы получаете - если данные постоянно принимаются и обрабатываются, вы можете рассмотреть возможность получения дохода. Однако в большинстве случаев это приведет к «занятому» циклу, который тратит большую часть своего времени без необходимости пробуждать поток, чтобы проверить, готово ли что-нибудь.
Вы, вероятно, захотите либо поспать в течение короткого периода времени (возможно, менее секунды, используя usleep
), ИЛИ даже лучше использовать объект синхронизации, такой как мьютекс, чтобы сообщить о доступности данных.