Glib Threads против GMain Loop Eventing
У меня есть простая система, в которой есть структура GList. Есть два потока: скажем, Head(), который вызывает проникновение данных в структуру GList. Другой поток Tail() вызывает выход данных (и их обработку) в конце списка.
Я собирался реализовать это изначально, используя pthreads, но сама документация по glib предложила использовать вместо потоков основной цикл с контекстом для присоединения источников и отправки обратных вызовов.
В общем, не было ясно, какие проблемы пытается решить основной цикл glib, основной контекст и исходная система. Все, что я мог собрать, это то, что он находит приложения для чтения данных сокетов, его параллелизм с poll() и систему обработки событий пользовательского интерфейса.
Какой вариант использования системы GlibMainLoop? С точки зрения моей постановки проблемы это применимо?
1 ответ
GLib является частью проекта Gnome. Он был построен в первую очередь с учетом GUI-приложений, хотя он не ограничивается этим использованием. Его модель для программирования GUI является типичной моделью, основанной на событиях, управляемой главным циклом, который получает события и распределяет их соответствующим образом по компонентам. Вы должны интерпретировать документацию в этом свете.
Похоже, у вас нет приложения с графическим интерфейсом, единственной ассоциацией GLib является использование GList. Я нахожу GList немного сомнительным выбором в этом контексте, но не обязательно неправильным. Выбор GList не означает, что вы должны принять участие в разработке программы, управляемой событиями, и если вы этого не сделаете, вы, вероятно, не будете использовать цикл главных событий GLib.
Тем не менее, управляемый событиями дизайн может быть вам полезен, и в некоторых отношениях он будет проще, чем многопоточный. Многое зависит от деталей того, что должны делать ваш производитель и потребитель.