Handler源码阅读
文章目录
- 一、Handler机制架构图
- 二、Handler同步屏障机制
- 2.1 MessageQueue.next()
- 三、I/O多路复用
- 3.1 相关函数
- 3.1.1 epoll_create
- 3.1.2 epoll_ctl
- 3.1.3 epoll_wait
一、Handler机制架构图
二、Handler同步屏障机制
流程图在关键处对同步机制进行了说明, 接下来只取部分关键代码进行说明
2.1 MessageQueue.next()
Message next() {int pendingIdleHandlerCount = -1; // -1 only during first iterationint nextPollTimeoutMillis = 0;for (;;) {if (nextPollTimeoutMillis != 0) {Binder.flushPendingCommands();}nativePollOnce(ptr, nextPollTimeoutMillis);synchronized (this) {// Try to retrieve the next message. Return if found.final long now = SystemClock.uptimeMillis();Message prevMsg = null;Message msg = mMessages;// 同步屏障的消息target == null, 如果存在同步屏障, 进入到下面逻辑中if (msg != null && msg.target == null) {// 遍历链表取出异步消息do {prevMsg = msg;msg = msg.next;} while (msg != null && !msg.isAsynchronous());// 注意!!! 这里并没有移除屏障的逻辑!!!// MessageQueue.removeSyncBarrier可以移除指定的同步屏障}//...
三、I/O多路复用
- 1、IO多路复用的优势在于, 当处理的消耗对比IO几乎可以忽略不计时, 可以处理大量的并发IO, 而不用消耗太多的CPU/内存
- 2、IO多路复用指的是同一个进(线)成可以处理多个IO数据流
- 3、多线程+池模型指的是每个线程处理一个IO流
3.1 相关函数
3.1.1 epoll_create
// size: 告诉内核这个监听的数目一共有多大
int epoll_create(int size);
创建一个epoll句柄, 当创建好epoll句柄后, 它就是会占用一个fd值, 在使用完epoll之后, 必须调用
close()关闭, 否则就可能导致fd被耗尽
3.1.2 epoll_ctl
/*** fd: 需要监听的fd* *event: 告诉内核需要监听什么事件*/
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
3.1.3 epoll_wait
/*** 等待事件的产生* timeout: 超时时间(毫秒) 0立即返回, -1将阻塞, 大于0阻塞timeout后唤醒*/
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
Handler源码阅读相关推荐
- mybatis源码阅读
说下mybatis执行一个sql语句的流程 执行语句,事务等SqlSession都交给了excutor,excutor又委托给statementHandler SimpleExecutor:每执行一次 ...
- 【Dubbo源码阅读系列】之远程服务调用(上)
今天打算来讲一讲 Dubbo 服务远程调用.笔者在开始看 Dubbo 远程服务相关源码的时候,看的有点迷糊.后来慢慢明白 Dubbo 远程服务的调用的本质就是动态代理模式的一种实现.本地消费者无须知道 ...
- gin context和官方context_gin 源码阅读(二) 路由和路由组
" 上一篇讲的是gin 框架的启动原理,今天来讲一下 gin 路由的实现. 1 用法 还是老样子,先从使用方式开始: func main() { r := gin.Default() r.G ...
- koa源码阅读之koa-compose/application.js
koa源码阅读之koa-compose/application.js koa-Compose 为了理解方便特地把注释也粘进来 //这英语.我也来翻译一波 //大概就是把所有的中间件组合返回一个完整大块 ...
- android tcp socket框架_最流行的 Web 框架 Gin 源码阅读
最近公司大部分项目开始往golang换, api的框架选定使用gin, 于是将 gin的源码看了一遍, 会用几篇文章将gin的流程及流程做一个梳理, 下面进入正题. gin框架预览 上图大概是 gin ...
- DM 源码阅读系列文章(二)整体架构介绍
2019独角兽企业重金招聘Python工程师标准>>> 作者:张学程 本文为 DM 源码阅读系列文章的第二篇,第一篇文章 简单介绍了 DM 源码阅读的目的和规划,以及 DM 的源码结 ...
- 12.源码阅读(app启动流程-android api 26)
activity的启动流程之前已经通过源码了解了,那么app的启动流程是怎样的,从我们按下app的图标,到应用启动起来显示出画面,中间都经历了什么? 安卓是基于java的,所以和java有一定的相似性 ...
- Yii源码阅读笔记 - 日志组件
2015-03-09 一 By youngsterxyf 使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category); Yii: ...
- DotText源码阅读(7) --Pingback/TrackBack
DotText源码阅读(7) --Pingback/TrackBack 博客这种服务的区别于论坛和所谓文集网站,很大程度上我认为是由于pingback/trackback的存在,使得博客这种自媒体有可 ...
- mybatis源码阅读(五) ---执行器Executor
转载自 mybatis源码阅读(五) ---执行器Executor 1. Executor接口设计与类结构图 public interface Executor {ResultHandler NO_ ...
最新文章
- CentOS7下启动Nginx出现Failed to start nginx.service:unit not found
- 利用Unity3D制作简易2D计算器
- TestStack.White安装详解
- 【EventBus】事件通信框架 ( 订阅类-订阅方法缓存集合 | 事件类型-订阅者集合 | 订阅对象-事件类型集合 )
- 16 代码分割之错误边界与Suspense和命名导出
- LeetCode MySQL 608. 树节点
- 辣味就直往眼睛的专业o2o资讯
- 程序员是吃青春饭的,为啥还有这么多人想转行当程序员?
- python绘制矩形图_Python。在底图中绘制矩形
- 构建可扩展的思科互联网络---单区域OSPF
- PS 插件批量压缩png图片
- 数据库课程设计-KTV点歌系统(VB.net 窗体,MySQL5.5)
- Wifi攻击工具 3:图形化工具 fern-wifi-cracker
- 编程环境搭建(云上编程和本地编程)
- 压敏电阻MOV特性及选用
- 5k显示器和4k显示器有什么区别
- C语言 - 隐式类型转换
- CSS3 SVG实现可爱的动物哈士奇和狐狸动画
- 几大科技公司的组织结构图
- 黑色炫酷动态引导页404页面源码 自适应