社区
C++ 语言
帖子详情
内存映射文件与命名管道的速度谁快
vegascsu
2012-06-21 10:32:25
我有两个进程,需要进行进程间通信,采用请求/响应的机制。
由于请求/响应的次数,1秒内估计有1万次,现在用的是命名管道,发现速度不行。当然这个时间也跟另一个进程的数据处理时间有关。请问有没有更快的方式,比如内存映射文件是不是更快呢。
...全文
518
11
打赏
收藏
内存映射文件与命名管道的速度谁快
我有两个进程,需要进行进程间通信,采用请求/响应的机制。 由于请求/响应的次数,1秒内估计有1万次,现在用的是命名管道,发现速度不行。当然这个时间也跟另一个进程的数据处理时间有关。请问有没有更快的方式,比如内存映射文件是不是更快呢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pathuang68
2012-06-21
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
响应方确实具有多个线程,估计最大时会有60个线程,我现在是直接用CreateThread来创建线程的。请问这种方法,是不是较慢。是不是你说的线程池会快一些呢。
另外消息队列你是指通信上用消息队列吗?
我试了一下,主要时间浪费在响应方的数据处理上,通信时间很少,数据处理上时间的增加,主要是加入了线程同步,我用的是临界区。不用线程同步,程序就会异常,请问有没有好的解决方案
引用 3 楼……
[/Quote]
1. 就用线程池吧。线程频繁的创建和销毁会需要很多时间,线程池可以避免这个消耗。
2. 你开了60个线程是否太多了?由于线程太多做造成线程同步的消耗也不容小视,还有你的机器上估计也没有60个CPU内核吧?这样密集的运算开再多的线程意义也不大,反而会降低处理速度。
赵4老师
2012-06-21
打赏
举报
回复
共享内存+锁
vegascsu
2012-06-21
打赏
举报
回复
响应方确实具有多个线程,估计最大时会有60个线程,我现在是直接用CreateThread来创建线程的。请问这种方法,是不是较慢。是不是你说的线程池会快一些呢。
另外消息队列你是指通信上用消息队列吗?
我试了一下,主要时间浪费在响应方的数据处理上,通信时间很少,数据处理上时间的增加,主要是加入了线程同步,我用的是临界区。不用线程同步,程序就会异常,请问有没有好的解决方案
[Quote=引用 3 楼 的回复:]
并发处理看行不行啊,
响应方用线程池来处理~~
看消息队列行不?
[/Quote]
vegascsu
2012-06-21
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
那用共享内存吧, 申请个500M的, 里面建个环形队列, 做一个进程共享mutex+cond, 做lock+cond_wait+cond_brodcast支持多进程并发写多进程并发读,保证无死锁。
[/Quote]
我测了一下,好像确实不是通信的时间问题,主要是我内部数据处理的时间造成的。
由于内部数据处理所在的那个进程,有多个线程,我用的是临界区的线程同步方法,所以造成时间较慢。
你说的这种方法,有没有详细的介绍,或者推荐一下资料看看呀
qq120848369
2012-06-21
打赏
举报
回复
那用共享内存吧, 申请个500M的, 里面建个环形队列, 做一个进程共享mutex+cond, 做lock+cond_wait+cond_brodcast支持多进程并发写多进程并发读,保证无死锁。
pathuang68
2012-06-21
打赏
举报
回复
应该不会更快。内存映射文件通常的目的:用操作内存的方式,操作磁盘文件的,尤其是是针对文件比较大的时候。
直接用共享内存试试吧,如果还不行估计常规的办法就木有了。
jody_go
2012-06-21
打赏
举报
回复
并发处理看行不行啊,
响应方用线程池来处理~~
看消息队列行不?
luciferisnotsatan
2012-06-21
打赏
举报
回复
自己测一下不就清楚了
龙哥依旧
2012-06-21
打赏
举报
回复
just try it !
jackyjkchen
2012-06-21
打赏
举报
回复
命名管道走网络协议栈,速度应该慢些
内存映射擅长随机操作文件,能大大降低操作复杂度,顺序操作的话(不用seek跳来跳去),普通I/O也不麻烦,只是相当于多一层缓冲,效率略低
线程是太多了,尽量用线程池
qq120848369
2012-06-21
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
响应方确实具有多个线程,估计最大时会有60个线程,我现在是直接用CreateThread来创建线程的。请问这种方法,是不是较慢。是不是你说的线程池会快一些呢。
另外消息队列你是指通信上用消息队列吗?
我试了一下,主要时间浪费在响应方的数据处理上,通信时间很少,数据处理上时间的增加,主要是加入了线程同步,我用的是临界区。不用线程同步,程序就会异常,请问有没有好的解决方案
引用 3 楼……
[/Quote]
响应速度慢造成的队列阻塞必须多线程/多进程并发, 没什么好考虑的.
如果你考虑内存已经承载不了那么大的排队阻塞了, 可以考虑使用开源消息队列, 保证不会因为内存耗尽崩掉, 并且可以持久化避免数据丢失.
IPC-Bench性能对比分析:共享内存 vs
内存映射
文件
vs
管道
vs FIFO
在现代操作系统中,进程间通信(IPC)是实现多任务协作的关键技术。本指南将通过IPC-Bench项目提供的权威性能数据,深入对比四种主流IPC机制——共享内存(Shared Memory)、
内存映射
文件
(mmap)、
管道
(Pipe)和FIFO(
命名
管道
)的性能表现,帮助开发者为不同应用场景选择最优通信方案。 ## 核心IPC机制性能概览 🚀 IPC-Bench项目([GitHub 加速计划
DotNetGuide
内存映射
文件
:突破大
文件
处理性能瓶颈的终极方案
当你面对10GB级别的数据库备份、日志
文件
或传感器采集数据时,是否经历过: - 使用`FileStream`读取导致内存溢出异常 - 分块处理逻辑复杂且IO瓶颈明显 - 跨进程共享数据时的
管道
/套接字性能损耗 **本文将彻底解决这些痛点**,通过.NET
内存映射
文件
(Memory-Mapped Files)技术,让你无需复杂架构即可实现: - 大
文件
随机访问性能提升80%+ - 内存占用降低90...
匿名
管道
、
命名
管道
、共享内存、消息队列 详解+代码实现+全维度对比
本文详细介绍了Linux系统下四种常用的进程间通信(IPC)方式:匿名
管道
、
命名
管道
、共享内存和消息队列。匿名
管道
仅支持有血缘关系的进程间单向通信,
命名
管道
通过
文件
标识支持无血缘进程通信。共享内存是最
快
的IPC方式,但需配合同步机制使用。消息队列则按消息类型分类传输,适合优先级通信场景。文章提供了每种IPC方式的C语言实现代码示例,包括父子进程通信、无血缘进程通信以及共享内存与信号量的同步使用。这些IPC方式各有特点,适用于不同场景下的进程间数据传输需求。
Linux进程间通信:
命名
管道
与共享内存的实现与应用
可以
快
速搭建演示环境,实际体验发现其生成的项目结构清晰,一键部署功能省去了配置环境的麻烦。特别是对于需要持续运行的通信服务演示,平台提供的托管服务让测试过程变得非常顺畅。在Linux系统中,进程间通信(IPC)是系统编程的重要部分。
命名
管道
和共享内存作为两种典型方式,各有特点和应用场景。下面通过几个关键点来理解它们的实现原理和实际使用。通过
文件
路径实现无关进程通信,解决了匿名
管道
的血缘限制。相比
管道
速度
更
快
,但需要自行处理同步问题。需要简单同步的场景优先考虑
命名
管道
。实际应用中的选择建议。
MFC内存共享与
管道
技术详解
内存共享指的是两个或多个进程间通过共同访问同一内存区域来实现数据交换的一种机制。通过内存共享,进程可以实时地读取和更新同一内存块中的数据,而不是通过消息传递或者
文件
交换数据,这样可以大幅度降低通信延迟,提升数据处理
速度
。内存共享的重要性在于其高效性,尤其是在处理大量数据和需要高速数据交换的场景中。它可以减少系统资源的消耗,并且提高程序的整体性能。对于资源受限的环境(如嵌入式系统),内存共享还能减少对物理内存的需求。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章