前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java Mq和Native Mq之间的关系

Java Mq和Native Mq之间的关系

作者头像
北洋
发布2022-05-06 15:34:32
1.2K0
发布2022-05-06 15:34:32
举报
文章被收录于专栏:北洋csdn

相关名词

mq:消息队列MessageQuene的缩写

流程

java的mq初始化的时候会先初始化native的mq再native的mq中又创建了native层的looper。同时native层把自己mq传入到了java中mq的mptr对象

java消息队列中调用nativepollonce(javaMq中的next方法)最终会调用到mtpr的nativepollonce(mtpr是native层的消息队列对象)该方法用于等待一个java层的消息来临

native的mq的nativepollonce会调用looper的pollonce方法(这个looper是native层的)

pollonce方法中会取出responce(其他监听的fd来的request封装的)处理

接着会调用pollinner。 pollinner才是真正决定是否有消息处理的地方。 pollinner中会等待pipe唤醒(代表有消息来了需要处理),唤醒之后查看是否是消息来还是其他fd发出的request。

之后

取出管道的事件进行处理,先处理native的消息。

fd发出的request:对其封装成一个response。添加到mresponse数组中。 等待native消息处理完后再取出response数组处理监听fd得到的事件。

最后返回java的消息回到java的nativepollonce方法中。

java和native中都是利用handler发消息,都是调用的管道流进行唤醒。

java层的next会调用nativepollonce进入到native的消息队列中,native层looper的pollinner实现阻塞。(唤醒可能是由于消息或者fd发生request)。

为fd的request创建对应response添加到response数组中,等待native的消息处理完,在处理request,接着返回到java的消息。java的mq恢复处理。

注意点

根据上面的分析流程我们可以知道,即使CPU充足堆栈情况正常也不能一定保证java发出的消息可以按计划得到执行。这个时候很有可能是native在处理自己的消息或者在native中对监听到的fd做处理,最后才会轮到java中的消息处理。nativePollonce才因此返回进入java消息处理过程。

mq为什么采用epoll机制?

select和epoll机制区别:

1.关于监听fd的复制次数

select每次调用都需要将监听的事件复制到内核中。而epoll只需要在epllctl进行加入操作时才复制一份

2.效率问题

epoll使用红黑树保存监听事件,而select内部使用数组存储(监听事件数量有限10个)。当监听事件变得多时select效率没有epoll好,但是当事件少时两者查找效率差不多

epoll和pipe区别

epoll等待监听事件触发。等待监听的fd和对应接受的动作

使用pipe用于唤醒,使用pipe用作线程间通信的原因是因为:写端发送的数据读端不感兴趣,只做简单的唤醒,无需对数据处理,因此使用pipe读端不关心数据只起到唤醒作用

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相关名词
  • 流程
  • 之后
  • 注意点
  • mq为什么采用epoll机制?
    • select和epoll机制区别:
      • epoll和pipe区别
      相关产品与服务
      消息队列 CMQ 版
      消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档