LINUX.ORG.RU

А есть хоть какойто смысл помещать main event loop в отдельный тред?

 event-loop, , ,


0

1

При этом предполагается что основной тред останавливается при помощи pthread_join() сразу после pthread_create(main_loop) и других тредов в системе просто нет.

Есть система которая таким макаром насквозь построена и я пытаюсь понять это хитрый технический ход или банальная некомпетентность.

★★★★★

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

возможно, предполагалось, что main event loop-ов будет несколько в будущем

anonymous
()

без кода не разобраться

anonymous
()

если основным тредом ловить сигналы и рулить остановом петли, то есть.

anonymous
()
Ответ на: комментарий от anonymous

если основным тредом ловить сигналы и рулить остановом петли

не предполагается. Pthread_join() сразу же после phtread_create().

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

не предполагается. Pthread_join() сразу же после phtread_create().

Из этого нельзя сделать никаких выводов, сигналы могут настраиваться перед всем этим добром на какие-нибудь колбеки. Если в вашей системе совсем ничего не делают с сигналами, даже не блокируют в новом потоке, то система действительно странная.

anonymous
()

например, если из главного треда планируется общаться с аудиоподсистемой макоси. В этом случае лучше его не занимать тем, что можно вынести.

max_lapshin ★★★★★
()

Бессмысленное занятие. Выносить основное выполнение в отдельную нить имеет смысл, если в основной обрабатывать сигналы. Но и то, можно через signalfd засунуть их в основной poll().

i-rinat ★★★★★
()

1. pthread_join является cancellation point.

2. У потока может быть другой приоритет и/или cancelability.

3. Потоку можно присвоить имя с целью красивого вывода в htop/ps.

4. Может быть TLS или ещё какие-то глобальные объекты, которым не место в главном потоке.

Но, скорее всего, таким образом решили реализовать «модульность».

Нужно смотреть по коду. Если ничего нет в основном потоке, то смотреть вызовы pthread_self(), которые могут указать на «плюшки».

Ну, и пп. 1-4 могли существовать в *прошлом*. Некро^W археология в помощь!

Macil ★★★★★
()

Есть система которая таким макаром насквозь построена

Ну, если считать системой плеер, то deadbeef. Три треда: event loop, message loop и main loop. Main loop инициализирует параметры, парсит командную строку и, если может присоединиться на локальный сокет, посылает всё туда, иначе запускает плеер и join-ится c event loop. Как event loop заверщается main loop всё зачищает и всё.

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