开发者社区 问答 正文

进程间通信(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 3726 分享
分享
版权
举报
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 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等