Optimization 如何更快地访问System V共享内存?

Optimization 如何更快地访问System V共享内存?,optimization,ipc,shared-memory,latency,Optimization,Ipc,Shared Memory,Latency,我正在使用systemv共享内存在我的两个PHP应用程序之间进行通信。一个应用程序在单个共享内存段上为只读(Writer),另一个为只读(Reader)(数据约为900-1000字节) 这两个应用程序都使用无限循环运行,睡眠时间1μssleep,以防止100%的CPU使用(参见下面的代码示例) 读卡器从共享内存段获取写入器写入的数据需要~1ms。有趣的是,如果我只从Writer中删除usleep,读卡器将获得大约500μs的数据。如果我仅从读卡器中删除usleep,读卡器将以大约200μs的速度

我正在使用
systemv共享内存
在我的两个PHP应用程序之间进行通信。一个应用程序在单个
共享内存段上为只读(Writer),另一个为只读(Reader)(数据约为
900-1000字节)

这两个应用程序都使用无限循环运行,睡眠时间
1μs
sleep,以防止100%的CPU使用(参见下面的代码示例)

读卡器从
共享内存段
获取写入器写入的数据需要
~1ms
。有趣的是,如果我只从Writer中删除
usleep
,读卡器将获得大约
500μs的数据。如果我仅从读卡器中删除
usleep
,读卡器将以大约
200μs的速度获取数据。删除
usleep
的问题是核心使用率为100%

我尝试将每个应用程序分配到同一个核心(使用
任务集
),两个应用程序在同一个核心上使用
usleep
,读卡器在
300-400μs
(有时峰值在
900μs
附近)获得数据。如果我从读卡器中删除
usleep
,并且两个应用程序都在同一个内核上,读卡器获取数据的速度不会快很多,大约
300-390μs

半毫秒对某些人来说可能听起来很可笑,但速度是我的应用程序中最重要的东西,对我来说有着巨大的不同

如果有人能帮助我理解为什么我在上面的例子中有这么大的不同,那就太好了。任何关于加快执行速度的想法都将受到极大的赞赏

规格

  • 内存:12GB DDR3(6x2GB)以1066 MHz的频率运行
  • CPU:双英特尔至强@2.40GHz(四核,超线程)

更新 #1我试图用它将睡眠时间减少到纳秒而不是微秒,而Reader仍然需要
~1ms


#2我在Python中也有同样的问题,只是需要
~1-2ms
而不是像PHP中那样的
~1ms
。我试着使用
ctypes模块和
clock\u nanosleep
,我能做到
~300μs
,这还不算太糟糕,但我正在寻找更快的东西。

你应该试试如果你的软件仅限于一个类似UNIX的操作系统,也可以使用POSIX消息队列。请在此处查看概述:

如果您的软件仅限于一个类似UNIX的操作系统,也可以使用POSIX消息队列。请在此处查看概述:

很有趣,我将试一试。一旦有结果,我会发回。非常感谢。我还没来得及尝试,但一旦我尝试了,而且确实有用,我会同意答案:)有趣,我会尝试一下。一旦有结果,我会发回。非常感谢。我还没来得及尝试,但一旦我尝试了,而且确实有帮助,我会批准答案:)
while(true) {
    shm_get_var($shm, 1);
    usleep(1);
}