首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux下进程间的最小延迟通知方法

Linux下进程间的最小延迟通知方法
EN

Stack Overflow用户
提问于 2011-11-02 10:55:36
回答 2查看 5.4K关注 0票数 18

我正在寻找最低的延迟 IPC,它允许将一个进程休眠,而允许其他进程唤醒它。

我在找最低延迟的方法。迄今为止,一些可能的方法:

(sigwait)

  • Using sem_post/sem_wait

  1. 将字节写入管道并从管道中读取。
  2. 将字节写入套接字并从中读取。
  3. 发送信号(杀死)并等待它的出现。

还有其他更好的主意吗?

任何特定于Linux的解决方案都可以。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-05 14:28:15

一般来说..。操作系统方法之间几乎没有区别。

设置:

与两个不同CPU密切相关的

  1. 两个进程。
  2. 一个进程睡眠(纳米睡眠)为N微秒,测量当前时间,然后通知其他进程。
  3. 其他进程唤醒测量当前时间并将其与客户端的时间进行比较。在100

Linux2.6.35 x86_64h 111/code>CPU上预热1K样本后,计算

  1. 平均值、标准差、中位数和百分位数95 : Intel i5 M 460h 212g 213

结果:

信号量(sem_wait/sem_post内核- futex):

代码语言:javascript
复制
sleep us     mean             median      %95
       1     4.98 ±18.7         3.78     5.04
      10     4.14 ±14.8         3.54     4.00
     100    20.60 ±29.4        22.96    26.96
    1000    49.42 ±37.6        30.62    78.75
   10000    63.20 ±22.0        68.38    84.38

信号(杀死/等待)

代码语言:javascript
复制
sleep us     mean             median      %95
       1     4.69 ±3.8          4.21     5.39
      10     5.91 ±14.8         4.19     7.45
     100    23.90 ±17.7        23.41    35.90
    1000    47.38 ±28.0        35.27    81.16
   10000    60.80 ±19.9        68.50    82.36

管道(管道+写/读)

代码语言:javascript
复制
sleep us     mean             median      %95
       1     3.75 ±5.9          3.46     4.45
      10     4.42 ±3.5          3.84     5.18
     100    23.32 ±25.6        24.17    38.05
    1000    51.17 ±35.3        46.34    74.75
   10000    64.69 ±31.0        67.95    86.80

套接字(套接字对+写/读)

代码语言:javascript
复制
sleep us     mean             median      %95
       1     6.07 ±3.2          5.55     6.78
      10     7.00 ±7.1          5.51     8.50
     100    27.57 ±14.1        28.39    50.86
    1000    56.75 ±25.7        50.82    88.74
   10000    73.89 ±16.8        77.54    88.46

作为参考,忙着等待:

代码语言:javascript
复制
sleep us     mean             median      %95
       1     0.17 ±0.5          0.13     0.23
      10     0.15 ±0.3          0.13     0.19
     100     0.17 ±0.3          0.16     0.21
    1000     0.22 ±0.1          0.18     0.35
   10000     0.38 ±0.3          0.30     0.78
票数 27
EN

Stack Overflow用户

发布于 2019-11-29 01:57:49

使用@Artyom提供的相同代码,但在更现代的硬件中使用。

CPUi9-9900k,关闭C/S/P状态,并将缩放策略设置为performance,使核心保持最大频率(~5 5GHz)。

OSPreempt用内核5.0.21修补Linux,提供了更好的实时性能。

CPU亲和力:两个进程()单独运行在两个独立的核心中,它们远离无关的进程并中断AMSP。

结果:

信号量(sem_wait/sem_post内核- futex):

代码语言:javascript
复制
sleep us     mean             minimum  median      %99
       1     1.75 ±0.1          1.60     1.74     1.82
      10     1.76 ±0.0          1.61     1.75     1.83
     100     2.12 ±0.3          1.59     2.24     2.42
    1000     2.46 ±0.3          1.75     2.47     2.56
   10000     2.45 ±0.1          2.11     2.44     2.54

信号(杀死/等待)

代码语言:javascript
复制
sleep us     mean            minimum   median      %99
       1     2.15 ±0.2          2.00     2.13     2.22
      10     2.12 ±0.2          1.93     2.11     2.19
     100     2.56 ±0.3          2.00     2.67     2.88
    1000     2.90 ±0.3          2.17     2.90     3.01
   10000     2.94 ±0.5          2.66     2.89     3.03

管道(管道+写/读)

代码语言:javascript
复制
sleep us     mean            minimum   median      %99
       1     2.05 ±0.2          1.88     2.03     2.15
      10     2.06 ±0.3          1.89     2.04     2.17
     100     2.54 ±0.4          1.88     2.63     2.87
    1000     2.98 ±0.3          2.27     2.98     3.09
   10000     2.98 ±0.3          2.69     2.96     3.07

套接字(套接字对+写/读)

代码语言:javascript
复制
sleep us     mean            minimum   median      %99
       1     3.11 ±0.4          2.85     3.09     3.22
      10     3.14 ±0.1          2.92     3.14     3.25
     100     3.66 ±0.5          2.92     3.74     4.01
    1000     4.03 ±0.4          3.28     4.03     4.17
   10000     3.99 ±0.4          3.64     3.96     4.10

作为参考,忙着等待:

代码语言:javascript
复制
sleep us     mean            minimum   median      %99
       1     0.07 ±0.1          0.06     0.07     0.07
      10     0.07 ±0.1          0.06     0.07     0.07
     100     0.07 ±0.0          0.06     0.07     0.08
    1000     0.09 ±0.1          0.07     0.08     0.09
   10000     0.09 ±0.1          0.07     0.09     0.09
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7979164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档