LINUX.ORG.RU

while(true) в потоке грузит cpu

 , ,


0

2

приветы. вопрос: в приложении крутится в бесконечном while второй поток, который нужен только лишь для отлова сигналов, которые генерятся в первом потоке. из за этого while cpu загружен на 100%. Существуют ли какие нибудь устоявшиеся конструкции кроме sleep, чтобы снизить cpu load из за этого while? Использование sleep не повлияет на обработчик сигналов во втором потоке? Синхронизацию между потоками как то использовать не хочется, чтобы минимизировать блокировки в первом потоке.

Может быть переписать на golang?

nikolnik ★★★
()

Конечно, существуют. В pthread, если мне не изменяет память, надо смотреть так называемые «condition variables». В Java это будут wait и notify. В haskell - через STM

dave ★★★★★
()

man 2 pause, выполнение останавливается и ждёт сигнала.

u0atgKIRznY5
()

делай через сокеты

anonymous
()

"-я не осилил семафоры/мютексы и гружу трэдом проц на 100%. что мне делать?
-перепеши на golang."
жесть... теперь я начинаю осознавать зачем в скором времени понадобятся 32-х ядерные процы на десктопе...
ps: про семафоры почитай, чувааак.

goodwin ★★
()
Ответ на: комментарий от dave

плюсую. остальных советчиков нужно отправлять дворы мести.

топикстартеру - синхронизация понадобится в любом случае.

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 1)

single-thread Redis + ZMQ, так сможешь разнести процессы на разные ноды

Mirage1_
()

если это сигналы, читай man ppoll.

если это посылки, то читай condition_variables и сделай очередь.

ckotinko ☆☆☆
()
Ответ на: комментарий от goodwin

Просто ты не осилил сарказм… Впрочем, канал решил бы половину «проблемы» ТС.

korvin_ ★★★★★
()

А откуда гарантия что сигнал будет обработан именно вторым потоком?

redixin ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.