【问题标题】:Glib Threads vs GMain Loop EventingGlib 线程与 GMain 循环事件
【发布时间】:2019-11-09 11:19:00
【问题描述】:

我有一个简单的系统,其中有一个 GList 结构。有两个线程:比如 Head() 导致数据进入 GList 结构。另一个线程 Tail() 在列表的尾部导致数据出口(及其处理)。

我原本打算使用 pthreads 来实现这一点,但 glib 文档本身建议应该使用带有上下文的主循环而不是线程来附加源和调度回调。

一般来说,并不清楚 glib 主循环、主上下文和源系统试图解决什么问题。我所能收集到的只是它在读取套接字数据、它与 poll() 的并行性和 UI 事件系统方面找到了应用程序。

GlibMainLoop 系统的用例是什么?就我的问题陈述而言,它是否适用?

【问题讨论】:

  • 解决同步问题
  • @stark 感谢您的回答。它的速度怎么样?它会扩展到高速数据速率吗?
  • 过早优化。

标签: c pthreads glib mainloop


【解决方案1】:

GLib 是 Gnome 项目的一部分。它首先是在考虑 GUI 应用程序的情况下构建的,尽管它不限于这种用途。它的 GUI 编程模型是典型的基于事件的模型,由接收事件并将它们适当地分派给组件的主循环驱动。您应该从这个角度解释文档。

听起来你的不是一个 GUI 应用程序,它唯一的 GLib 关联是它使用 GList。在这种情况下,我发现 GList 的选择有点可疑,但不一定是错误的选择。选择 GList 并不意味着您应该致力于事件驱动的程序设计,如果您不这样做,那么您可能无法使用 GLib 主事件循环。

尽管如此,事件驱动设计可能会为您提供良好的服务,并且在某些方面它会比多线程设计更简单。很大程度上取决于你的生产者和消费者应该做什么的细节。

【讨论】:

  • 惊人的信息。我的平台将主要是一个没有 GUI 的数据处理器(至少现在是这样)。它输入蓝牙数据,也许还有视觉数据,然后尝试快速合成这些数据并从该数据中采取基于人工智能的行动。
  • 所以是的,从你所说的来看,我真的很高兴回退到基本结构。或许 GLib 唯一的另一个重要用途是 ThreadPools,它很难手动实现。
猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多