Несколько баз libevent в разных потоках на одном и том же fd

Мне любопытно узнать, пробовал ли кто-нибудь еще это ... Я собираюсь попробовать, но я надеялся, что у кого-то еще может быть какой-то опыт, которым можно поделиться, прежде чем я сижу здесь в 23:00 (нужно идти в работать утром), чтобы попробовать это.

Если я загружу несколько потоков и из каждого потока создаю базу событий и создаю события прослушивания на одном и том же fd, как Libevent отреагирует на это? Будет ли только одна из баз событий в конечном итоге выиграть и инициировать событие, или каждая из них в конечном итоге вызовет событие?


person Jonny Whatshisface    schedule 10.12.2015    source источник
comment
Я предполагаю, что ваша цель - использовать другие ядра ЦП, используя потоки ... в этом случае вы могли бы сделать так, чтобы один поток принимал все входящие события, который просто помещал их в буфер, а затем имел пул потоки, каждый из которых затем берет события из буфера и обрабатывает их. Итак, если бы у вас был 4-ядерный процессор, у вас был бы один поток, принимающий события, и пул из трех рабочих потоков. Я сделал это, и это работает.   -  person SlappyTheFish    schedule 05.09.2016


Ответы (1)


Ну, я пошел дальше и очень быстро закодировал. К сожалению, как я и подозревал, каждая база событий запускает событие. Таким образом, с четырьмя потоками, каждый со своей собственной уникальной базой событий и набором событий на одном и том же fd, он запускал функцию четыре раза.

person Jonny Whatshisface    schedule 10.12.2015