(总结)高并发消息队列常用通知机制

最近在研究一个高性能的无锁共享内存消息队列,使用的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方式实现比较复杂。

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

时间: 2024-10-11 05:09:33

(总结)高并发消息队列常用通知机制的相关文章

超强图文|并发编程【等待/通知机制】就是这个feel~

你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough 现陆续将Demo代码和技术文章整理在一起 Github实践精选 ,方便大家阅读查看,本文同样收录在此,觉得不错,还请Star 并发编程为什么会有等待通知机制 上一篇文章说明了 Java并发死锁解决思路 , 解决死锁的思路之一就是 破坏请求和保持条件, 所有柜员都要通过唯一的账本管理员一次性拿到所有

消息队列常用应用场景介绍

消息队列作为分布式系统中重要的组件,可以解决应用耦合,异步消息,流量削锋等系列问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ 消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景. 1 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信.传统的做法有两种 1.串行的方式:2.并行方式 (1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信.以上三个任

RabbitMQ消息队列:ACK机制

每个Consumer可能需要一段时间才能处理完收到的数据.如果在这个过程中,Consumer出错了,异常退出了,而数据还没有处理完成,那么 非常不幸,这段数据就丢失了. 因为我们采用no-ack的方式进行确认,也就是说,每次Consumer接到数据后,而不管是否处理完 成,RabbitMQ Server会立即把这个Message标记为完成,然后从queue中删除了. 如果一个Consumer异常退出了,它处理的数据能够被另外的Consumer处理,这样数据在这种情况下就不会丢失了(注意是这种情况

浅析腾讯云分布式高可靠消息队列服务CMQ架构

在分布式大行其道的今天,我们在系统内部.平台之间广泛运用消息中间件进行数据交换及解耦.CMQ是腾讯云内部自研基于的高可靠.强一致.可扩展分布式消息队列,在腾讯内部包括微信手机QQ业务红包.腾讯话费充值.广告订单等都有广泛使用.目前已上线腾讯云对外开放,本文对腾讯云CMQ核心技术原理进行分享介绍. CMQ消息队列主要适用于金融.交易.订单等对可靠性.可用性有较高要求的业务场景. 以腾讯充值系统为例,该充值系统通过CMQ 对交易模块.发货部分.结算系统进行异步解耦.削峰填谷,一方面大大降低了模块间耦

腾讯云分布式高可靠消息队列CMQ架构

版权声明:本文由张浩原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126 来源:腾云阁 https://www.qcloud.com/community 在分布式大行其道的今天,我们在系统内部.平台之间广泛运用消息中间件进行数据交换及解耦.CMQ是腾讯云内部自研基于的高可靠.强一致.可扩展分布式消息队列,在腾讯内部包括微信手机QQ业务红包.腾讯话费充值.广告订单等都有广泛使用.目前已上线腾讯云对外开放,本文对腾讯云CM

腾讯云分布式牛 彩源码下载高可靠消息队列 CMQ 架构

牛彩源码下载联系方式:QQ:2747044651 网页在分布式大行其道的今天,我们在系统内部.平台之间广泛运用消息中间件进行数据交换及解耦.CMQ是腾讯云内部自研基于的高可靠.强一致.可扩展分布式消息队列,在腾讯内部包括微信手机QQ业务红包.腾讯话费充值.广告订单等都有广泛使用.目前已上线腾讯云对外开放,本文对腾讯云CMQ 核心技术原理进行分享介绍. CMQ消息队列主要适用于金融.交易.订单等对可靠性.可用性有较高要求的业务场景. 以腾讯充值系统为例,该充值系统通过CMQ 对交易模块.发货部分.

高可用消息队列集群zookeeper+leveldb+activemq

正在上传中---- 预计8月底完成

微服务、分布式、高并发都不懂,你拿什么去跳槽?

微服务架构 BAT互联网架构这些年的演进分析 国内外常见分布式系统架构状况介绍 微服务架构指南:领域驱动设计DDD模型 SpringCloud1-2实战篇 Config分布式配置中心 Eureka注册与发现机制 Ribbon客户端负载均衡 Hystrix服务熔断组件 Feign声明式服务调用 Zuul网关服务 项目实战:SpringCloud微服务架构 4.1 高并发分布式技术专题 - 分布式开发技术 4.1.1 RPC 4.1.2 分布式系统指挥官Zookeeper 4.1.3 Dubbo框架

转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合

需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框架和工具技术固然是最优选择:但是,如果能在现有的框架的基础上提出简单可依赖的解决方案,未尝不是一种提升自我的尝试. 解决: 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异参考文章] 问题二:批量入库就需要有高并发的消息队列,决定