zoukankan      html  css  js  c++  java
  • 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和处理"循环

  • 相关阅读:
    Arch安装KDE5
    Gentoo解决Windows系统txt文本中文乱码问题
    用e2fsck修复受损的linux文件系统
    linux远程控制windows
    vim常用命令
    bash shell 常用快捷键
    Deepin Linux 安装JDK
    Linux清除磁盘上的RAID信息
    IDEA社区版运行并发布web项目
    CentOS 7 ibus 导入第三方词库
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/9152045.html
Copyright © 2011-2022 走看看