开发者社区> 问答> 正文

进程间通信(IPC)是否速度比直接写文件要慢?

最近考虑把日志发送到守护进程处理,写了几个程序测了一下,发现最快的unix域套接字比直接write文件还是要慢一点,写千万条日志(每条日志100多字节)的时间大概都在20到25秒左右(40~50MB/s)。试了一下redis,发现速度更慢,大概要120秒。

以上都是无缓存的write,用标准IO库(FILE*)写千万条是5秒,大约也就是250MB/s。我知道mmap更快,不过不适合我这个场景,最后是顺序传递消息写日志的。

有木有更快的进程间通信方法?有人提到共享内存,但我目前的场景是一个消息队列的场景,如果用共享内存能实现高速的消息队列的话,写内核消息队列和unix域套接字的人是否已经实现了?

展开
收起
a123456678 2016-06-13 15:46:16 3567 0
1 条回答
写回答
取消 提交回答
  • dd if=/dev/zero bs=1M count=10k | cat >/dev/null
    记录了10240+0 的读入
    记录了10240+0 的写出
    10737418240字节(11 GB)已复制,5.38212 秒,2.0 GB/秒

    dd if=/dev/zero bs=100k count=100k | cat >/dev/null
    记录了102400+0 的读入
    记录了102400+0 的写出
    10485760000字节(10 GB)已复制,5.1154 秒,2.0 GB/秒

    dd if=/dev/zero bs=1k count=10000k | cat >/dev/null
    记录了10240000+0 的读入
    记录了10240000+0 的写出
    10485760000字节(10 GB)已复制,8.479 秒,1.2 GB/秒

    dd if=/dev/zero bs=100 count=100000k | cat >/dev/null
    记录了102400000+0 的读入
    记录了102400000+0 的写出
    10240000000字节(10 GB)已复制,78.951 秒,130 MB/秒

    看来还是缓存和系统调用的差别,我测的时候比较符合最后一种情况,单条日志长度为100字节左右,速度马上就下来了

    2019-07-17 19:36:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
服务上云加速大家居产业C2M进程 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多