Android Q消息循环:休眠、唤醒的底层原理及native层源码分析

这篇博客详细剖析了Android Q中消息循环的休眠与唤醒机制,包括native层的实现。文章介绍了epoll和pipe在Linux中的基本概念,阐述了它们如何在Android系统中用于线程的休眠和唤醒。通过分析MessageQueue的nativeInit、Looper的构造函数以及pollOnce、wake方法,揭示了如何借助epoll和pipe在Java层与native层之间协调处理消息循环。
摘要由CSDN通过智能技术生成

epoll简介


Handler消息机制,在Java层的MessageQueue中,调用了native方法实现消息循环的休眠和唤醒(也就是线程的休眠和唤醒)。native方法nativePollOnce实现了消息循环的休眠,而方法nativeWake实现了消息循环的唤醒。

在native层,消息循环的休眠和唤醒使用了Linux内核的epoll机制和pipe。下面我们简单介绍一下epool机制是什么?

文件描述符

我们首先来介绍什么是文件描述符?

在Linux系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。

内核利用文件描述符来访问文件,文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来指定待读写的文件。

pipe(管道)

pipe是Linux中最基本的一种IPC机制,可以用来实现进程、线程间通信。

特点:
  • 调用pipe系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卜大爷

觉得不错的可以给我加油哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值