专栏首页北京马哥教育高并发消息队列常用通知机制

高并发消息队列常用通知机制

高并发消息队列常用通知机制

最近在研究一个高性能的无锁共享内存消息队列,使用的fifo来通知。结合之前《基于管道通知的百万并发长连接server模型》文章,这里总结一下常用的通知机制。

常用的通知机制中比较典型的有以下几种:

1、signal

这种机制下,我们向被通知进程发送一个特殊的signal(比如SIGUSR1),这样正在睡眠的读进程就会被信号中断,然后醒来。

该方法的优点是:读进程不需要监听一个额外的eventfd,适合一些不方便使用eventfd的场景;另外,用户可以选择是使用实时信号(SIGRTMIN+1),还是使用非实时信号(SIGUSR1)。

该方法的缺点是:通知不实时。因为信号的检查只有在中断返回的时候才会进行,这个时间跟操作系统的HZ、jiffies有关。

2、socket

这种机制下,写进程往socket(domain socket)写一个字符,然后读进程通过epoll得到数据到达的通知。

3、fifo

这种机制跟socket类似,写进程往fifo中写一个字符,然后读进程通过epoll得到数据到达的通知。

4、pipe

跟2、3差不多。

5、eventfd/signalfd

跟前面差不多,不过是内核帮我们事先fifo、signal通知,只有比较新的内核版本才支持。这种方式存在的问题是需要在不同进程间传递句柄,非fork方式实现比较复杂。

上面这几种方式的共性是都需要陷入内核,被通知进程只有在内核态才能接收通知,对于处理性能要求高的场景,应该少用通知。所以,当然就看业务场景发送通知的开销是不是很大了。如果请求量很大,读进程一直忙于处理,不会频繁触发通知,那就很合适了。

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-10-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IO类型与IO模型

    IO类型 同步与异步(synchronous,asynchronous):关注消息通知机制 同步: 进程发出系统调用之后,不会立即有返回信息,但是一旦有返回信息...

    小小科
  • 利用python代码求三角形最小路径和

    哈喽!同学们,今天和大家分享一下,利用Python代码求三角形最小路径和!给定一个三角形,每一步只能移动到下一行中相邻的结点上,求出自顶向下的最小路径和。

    小小科
  • 日常工作中有哪些很好的节约时间的技巧?

    我一直在测试和调整各种生产效率的技术,在过去的五年中,阅读了大量的书籍(其中大多数是重复的) ,这里是我的一些结论: 这不是一个关于时间的问题,而是关于精力。 ...

    小小科
  • Android 8.0无法发送通知栏?通知栏适配通知渠道

      不得不说Andoird的通知栏相比于IOS在使用上有着明显的不足,不仅是体验上的差异,还有大量的非关注通知铺满了通知栏,导致通知栏混乱,杂多。   为什么...

    饮水思源为名
  • [设计模式]之三:单例模式

    还是试想一个情景:现在有一个自定义对话框。当主界面上的按钮被点击后,弹出对话框。 一般的设计思路是这样的:

    wOw
  • python自动抢票神器

    农历八月十五日是中秋节。南宋吴自牧的《梦粱录》记载:“八月十五中秋节,此日三秋恰半,故谓之中秋。农历八月,是秋季的第二个月,称仲秋,八月十五又在仲秋的正中,所以...

    ellipse
  • PHP-打印水仙花数

    cwl_java
  • 前端弹幕实现

    目前视频播放平台弹幕几乎都是使用js操作dom的方式实现,由于篇幅的原因这次只展示js操作dom的实现方案。

    腾讯IVWEB团队
  • 【编程基础】Java里面如何对字符串排序?

    前几天有同学在群里问一个Java面试题,上面的思路很正确大概分为几步: 1、分割字符串: 用到的方法是String类的 public String[] spl...

    程序员互动联盟
  • Elasticsearch Document Update API详解、原理与示例

    从上述我们基本可以得知更新基本有3种方式,script、upsert、doc(普通更新)。

    丁威

扫码关注云+社区

领取腾讯云代金券