阅读更多

0顶
3踩

操作系统

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

 

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

来自: 博客园
0
3
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 还是自己写的东西比较放心

    最近不知道各位有没有到MS的网站上面看,在VS的页面里面有一个.NET的十个必用工具的Post。这个Post里面介绍的好几个工具都确实非常有用,比如说Reflector、NUnit、Regulator等等。说起来真巧,这里面介绍的Reflector最近就被我检查出一个Bug,这个Bug在查看Microsoft.WindowsCE.Forms.dll里面的_SIPWnProc函数,翻译出来的C#代码...

  • 消息队列,高并发的救火员

    文章目录一、前言二、消息队列三功能2.1 异步通信2.2 服务解耦2.3 流量控制...并发度4.3 消费者组4.4 消费者的offset五、消息队列四个问题5.1 消息丢失问题5.1.1 发送消息阶段如何保证消息不丢失5.1.2 存储消息阶段如何...

  • 消息队列的高并发优化

    消息队列的高并发优化 一、消息队列的基础总结 1-1 使用场景 - 解耦、异步、削峰 1-1-1 解耦 初级使用阶段,通常使用调用接口的方式,连接多个系统。 例如,A系统内调用了B/C/D的接口,若添加新系统E的接口调用,...

  • 【消息队列】五个问题详解消息中间件

    是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信(维基百科)。 基于以上的描述(MQ是用来解决...

  • 消息中间件(消息队列)介绍

    文章目录一、概述二、消息中间件的组成三、消息中间件模式分类3.1、点对点(PTP)模式3.2、发布订阅(Pub/Sub)模式3.3、小结四、消息中间件的...4.4、日志采集4.5、消息通讯五、消息中间件的优点六、消息中间件常用协议...

  • 浅谈消息队列及常见的分布式消息队列中间件

    背景分布式消息队列中间件是是大型分布式系统不可缺少的中间件,通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息。所以消息队列主要解决应用耦...

  • 消息队列(RabbitMQ)

    削锋,就是可以将高并发的网络请求 缓存到消息队中,慢慢的执行消息对对应的业务 618 秒杀购买商品 生成订单 扣减库存 扣减余额 发货,生成物流 如果以上 步骤都在一个应用的请求中去执行,在每秒 50000个并发的...

  • 消息队列使用的四种场景介绍

    以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种 1.串行的方式;2.并行方式 (1...

  • 消息队列的介绍及配置

    消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候 主要解决:应用耦合、...

  • 消息队列常见问题总结

    1. 为什么需要消息队列? 1.1 异步处理 我们先来思考如何设计一个秒杀系统? 秒杀系统需要解决的核心问题是:如何利用有限的服务器资源,尽可能多地处理短时间内的海量请求。 一个秒杀请求包含了很多步骤,比如: ...

  • 大型网站架构系列:分布式消息队列,消息队列的使用场景

    一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性...以下介绍消息队列在实际应用中常用的使用场景。异步处理,...

  • 【消息队列】消息队列常见面试题总结

    当消息消费完毕后,消费者会发送一个ACK确认消息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除,但如果消费者发送的消息因为网络传输等问题,没有发送给消息队列,消息队列无法确认消息...

  • 【高并发秒杀系统】对分布式锁、缓存、消息队列、限流等的原理分析及代码实现

    所以,设计一套高可用的秒杀系统,是尤为重要的。 一、技术选型阶段 在选型时,应尽可能用市面上主流、稳定的开发框架,以便于后续的维护与升级。本系统主要选用了以下框架来实现。 Springboot 用于基础架构 Redis...

  • 什么是消息队列及消息队列原理和应用场景详解

    “消息队列”是在消息的传输过程中保存消息的容器。 “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。“消息队列”是在...

  • 消息队列基础

    剖析高并发电商系统中订单系统的难点1.订单系统功能概览2.问题1:下单支付成功后,非核心业务繁杂,线性执行耗时,用户等待时间过长,怎么办?3. 退款流程,如果退款不成功怎么办?4.有大量未支付订单堆积怎么办?5....

  • 关于消息队列的使用

    消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,...

  • 高并发架构系列:详解分布式之消息队列的特点、选型及应用场景

    以上就是分布式之消息队列详解,更多Redis系列、Dubbo微服务系列、数据库系列等高并发架构设计,具体请参考高并发架构专题集合可领取【 超36期高并发架构总结:微服务+并发容器+秒杀实战等】   觉得不错请...

  • 消息队列

    消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,...

  • Java常用消息队列原理介绍及性能对比

    消息队列使用场景为什么会需要消息队列(MQ)? 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。...

Global site tag (gtag.js) - Google Analytics