gpt4 book ai didi

c - 在 Linux over windows 中共享内存性能(同步开销 : Semaphore)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:55 26 4
gpt4 key购买 nike

这篇文章是关于在 Linux 中计算共享内存在 windows 上的性能。
我是 Linux 开发新手。
我编写了客户端服务器应用程序,用于计算在 1 秒内从客户端(进程 1)向服务器(进程 2)传输了多少来自共享内存的数据包(大小为 2048 字节)。

我在windows下使用
创建文件映射
打开文件映射
MapViewOfFile
功能和共享内存同步我在客户端和服务器中都使用命名事件(createevent)以便一次可以在共享内存块中执行读取或写入操作。
我还在结构内部使用循环缓冲区作为共享内存块,因此它将变成 512 个大小为 4096 的共享 block

    struct block{
BYTE Data[4096];
long amount;
}
struct MemBuffer{
block m_Blocks[512];
...
...
}

实现了某种逻辑,使其以 FIFO 方式工作。

现在如果是linux我正在使用 posix 共享内存 api
shm_open
截断
map

share memory block 是相同的(如上面提到的 windows)用于同步信号量

现在表现

windows 计数为每秒 700000 个数据包
使用命名信号量的 linux 计数是每秒 500000 个数据包
使用未命名信号量的 linux 计数是每秒 600000 个数据包

根据我的观察,整个应用程序的开销是同步那么有人可以建议我更好的同步方法或如何提高 Linux 中共享内存的整体性能吗?

提前致谢

更新:

我正在使用带有 Windows 2003 服务器和 Red Hat Enterprise Linux 6.0 的双引导机器。机器配置如下 Intel Quad Core with 2.4 Ghz , 4GB RAM

最佳答案

这两种方法都应该在硬件级别产生相同的内存映射(除非你真的很倒霉并遇到缓存冲突)。所以是的,您看到的区别在于信号量的实现。但是不要相信我的话,在你生产和使用缓冲区的地方做实验,只是你从来没有真正读过或写过它们。看看您是否有相同的行为。

有很多库都具有高性能信号量。尝试其中之一,例如 boost .

关于c - 在 Linux over windows 中共享内存性能(同步开销 : Semaphore),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10784063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com