在android面试中,我们常会遇到Framework面试相关问题,而今天要共享的便是Zygote 为什么不采用Binder机制进行IPC通讯呢?

其主要调查的是程序员对binder的了解和zygote fork的了解。

问题正解:

这个很重要的原因是假如zygote采用binder 会导致 fork出来的进程发生死锁。

在UNIX上有一个 程序设计的准则:多线程程序里不准运用fork。

这个规矩的原因是:假如程序支持多线程,在程序进行fork的时候,就或许引起各种问题,最典型的问题便是,fork出来的子进程会仿制父进程的所有内容,包括父进程的所有线程状况。那么父进程中假如有子线程正在处于等锁的状况的话,那么这个状况也会被仿制到子进程中。父进程的中线程锁会有对应的线程来进行释放锁和解锁,但是子进程中的锁就等不到对应的线程来解锁了,所以为了防止这种子进程呈现等锁的或许的危险,UNIX就有了不建议在多线程程序中运用fork的规矩。

Android体系中,Binder是支持多线程的,Binder线程池有能够有多个线程运转,那么binder 中就自然会有呈现子线程处于等锁的状况。那么假如Zygote是运用的binder进程 IPC机制,那么Zygote中将有或许呈现等锁的状况,此刻,一旦通过zygote的fork去创立子进程,那么子进程将继承Zygote的等锁状况。这就会呈现子进程一创立,天生的就在等待线程锁,而这个锁缺没有当地去帮它释放,子进程一直处于等待锁的状况。

今天共享到此结束,下期更精彩~

重视大众号:Android老皮
解锁 《Android十大板块文档》 ,让学习更靠近未来实战。已形成PDF版

内容如下

1.Android车载应用开发体系学习指南(附项目实战)
2.Android Framework学习指南,助力成为体系级开发高手
3.2023最新Android中高档面试题汇总+解析,告别零offer
4.企业级Android音视频开发学习路线+项目实战(附源码)
5.Android Jetpack从入门到通晓,构建高质量UI界面
6.Flutter技术解析与实战,跨渠道首要之选
7.Kotlin从入门到实战,全方面提升架构根底
8.高档Android插件化与组件化(含实战教程和源码)
9.Android 功能优化实战+360全方面功能调优
10.Android零根底入门到通晓,高手进阶之路

敲代码不易,重视一下吧。ღ( ・ᴗ・` )