Я работаю над частью более крупного проекта, который должен читать из многих FIFO и перенаправлять их должным образом, в зависимости от команд. Для этого FIFO читаются по порядку в бесконечном цикле.Управляемый бесконечный цикл использует слишком много ресурсов
Проблема в том, что она потребляет слишком много ресурсов. Я могу понять, что этот процесс всегда выполняет операции и пробуждает процессор, но я бы хотел избежать такой перегрузки.
- Опция использует сигналы, но делает обработку намного более хаотичной, и трудно избежать выполнения каретки при обработке одной из команд.
- Другой вариант - использование блокировки чтения, но тогда мне понадобится процесс для каждого FIFO, потому что я не знаю, кто и когда отправит команду.
- Другой вариант - спать, но я не думаю, что это лучший вариант, и только спящий несколько миллисекунд - это не большая разница (я еще не пробовал).
Есть ли у вас какие-либо другие идеи, чтобы избежать перегрузки?
Если это Linux, вы можете использовать 'nice' из командной строки и' select' внутри. – Paul
Так вы пытаетесь одноканальной обработки нескольких FIFO в центральную отправку? Мне кажется, что поток за FIFO, который тянет с блокировкой, толкает в один fifo, который должен быть вашей централизованной диспетчеризацией (или я полностью не понимал проблему как описано). – WhozCraig
@Paul Select кажется очень полезным. У вас есть подробный пример, потому что документации недостаточно. – markmb