使用一个进程向多个其他进程发出信号 "simultaneously"

Using one process to signal multiple other processes "simultaneously"

我有两个不同的应用程序必须协同工作。进程 1 作为时间源,进程 2 根据进程 1 提供的时间源执行操作。我需要 运行 进程 2 的多个副本。目标是让一个时间源进程向其他 5-10 个进程发送信号同时处理,所以他们都同时执行他们的工作。

目前,我是通过以下方式实现的:

  1. 时间源程序启动,创建一个共享内存段,创建一个空的PID列表,然后解锁该段。
  2. 每次其中一个客户端程序启动时,它们会进入共享内存,将自己的 pid 添加到列表中,然后解锁。
  3. 时间源有一个定时器,每 10 毫秒关闭一次。每次计时器关闭时,他都会循环遍历 pid 列表,并向其中的每个人背靠背发送一个信号。

这种方法大多效果很好,但我希望它可以得到改进。我目前有两个症结:

  1. 在极少数情况下,传送到其中一个客户端进程的信号会偏移 ~2 毫秒左右。最终结果是:| 12 毫秒 | 8 毫秒 | 而不是 | 10 毫秒 | 10 毫秒 |.
  2. 第二个问题是所有的客户端程序实际上都是多线程的并且做了很多工作(尽管只有原始线程负责处理信号)。如果我同时有多个客户端进程运行ning,信号的传递会变得更加零星和倾斜,就好像当系统负担更多时它们更难传递(即使客户端进程准备好等待用于中断)。

做这类事情我还应该考虑哪些其他方法?我考虑了以下内容(都在共享内存段中):

即使进程处于等待状态,准备接收信号,也不意味着内核将要调度任务,尤其是当大多数任务处于 运行 状态时可用 CPU 个内核。

调整优先级(或nice级别)或进程和线程,将影响内核调度程序。 ¨ 您还可以使用内核中可用的不同调度程序及其参数。