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);
}