9.6 Binder系统_驱动情景分析_server的多线程实现

Posted 拉风摊主

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9.6 Binder系统_驱动情景分析_server的多线程实现相关的知识,希望对你有一定的参考价值。

当多个client对server发出请求的时候,如果server忙不过来的时候会创建多线程来处理请求

那么忙不过来由谁来判断?

server进程有个binder_proc结构体,其里面有todo链表(放有client发过来的数据),并且会唤醒等待在binder_proc.wait上的线程,如果有线程在wait上等待,表面server进程忙的过来;如果wait上空了,就表面server太忙了,驱动会向应用程序反馈

(1)驱动判断是否忙不过来

(2)驱动向APP发请求:创建新线程

(3)APP创建新线程

分析驱动向APP发出“创建新线程请求”的条件

(1)proc->requested_threads = 0;//未处理的新线程请求(如果已经申请了新线程请求则该变量不为0)

(2)proc->ready_threads =0;//空闲线程数为0

(3)已启动的线程数< max_threads(进程的最大线程数)

怎么写APP?

(1)设置max_threads,否则默认的是0

(2)收到驱动发来的BR_SPAWN_LOOPER请求后,创建新线程

(3)新线程发出ioctl:BC_REGISTER_LOOPER

(4)像主线程一样,进入一个循环,进行"read driver和处理"循环

 

以上是关于9.6 Binder系统_驱动情景分析_server的多线程实现的主要内容,如果未能解决你的问题,请参考以下文章

9.5 Binder系统_驱动情景分析_transaction_stack机制

9.2 Binder系统_驱动情景分析

9.10 Binder系统_分层

Android : 跟我学Binder --- 驱动情景分析

第5课第1节_Binder系统_C程序示例_框架分析

Android驱动学习-内部机制_回顾binder框架关键点