线程应用程序上不同原语的 IPC 延迟

Posted

技术标签:

【中文标题】线程应用程序上不同原语的 IPC 延迟【英文标题】:ipc delays on for different primitives on a threaded applications 【发布时间】:2013-10-22 18:28:43 【问题描述】:

我正在为 Windows 编写一个多线程应用程序。它有一个后台线程/线程来生成对象,这些对象被馈送到 UI 线程中。 当没有工作时,我希望 UI 线程休眠。要实现线程之间的同步,我可以想到多种选择。但是,我想知道在上下文切换方面每个原语的夸克是什么。

后台线程可能想要连续运行,并希望在准确的时刻唤醒 UI 线程。

    条件变量/信号量:我可以使用共享内存来传递数据和 cond.var 或信号量来同步。在那种情况下,上下文切换何时发生?它是在我发出信号的那一刻发生还是在线程的量子结束之后发生。一个比另一个好吗?

    sockets:我可以在每个线程中运行服务器和客户端,并且可以创建流而不是共享内存。我认为这里的上下文切换将在时间量结束的那一刻发生。

    还有其他选择吗?

谢谢

【问题讨论】:

【参考方案1】:

使用method1更好,因为它使用共享内存,单进程内存与同一进程中的其他线程进行通信。优点是在 2 的情况下没有 ipc 开销(如发送/接收或写入/读取)。

在这两种情况下,等待条件变量的线程,锁或等待读取数据的套接字,将进入等待状态,这意味着它将被调度出运行队列。一旦线程调用 pthread_cond_wait 或 pthread_mutex_lock,就会触发一个系统调用(在 linux 的情况下)并使调用线程进入睡眠状态。在套接字的情况下,调用 recv 的线程将进入睡眠状态。

【讨论】:

以上是关于线程应用程序上不同原语的 IPC 延迟的主要内容,如果未能解决你的问题,请参考以下文章

IPC之Posix信号量详解

估计 Python 到 Python IPC 的延迟

IPC机制1

android IPC 机制 (开发艺术探索)

进程控制的实现原语和进程通信(IPC)相关概念

应用于线程的延迟优先级更改