云彩店邀请码|半壳|优胜
近年来,随着移动设备制造工艺的不断提高和Android操作系统所提供的功能越来越强大,导致系统上的进程间通信的并发情况越来越频繁。而Google最初为Android设计的Binder进程间通信机制相对于传统Linux进程间通信机制并不占优势,在多核和高并发这两种情形下的性能表现并不理想。针对这方面的不足,本文对Binder进行分析与优化。
为了实现以上目标,本文通过对Binder进行详细的分析和测试,发现Binder通信的性能瓶颈位于Binder Driver中。而Binder Driver是基于共享内存的方式实现进程间通信的,Binder为了解决共享内存的同步互斥问题,引入了一个binder_lock全局锁来维护数据的一致性。由于该锁的缘故,影响了Binder在多核和高并发情形下的性能表现。本文通过消除binder_lock全局锁的影响,优化改进Binder的性能。而消除binder_lock的影响需要解决以下的同步问题:分配目标进程的共享内存区、拷贝数据到目标进程的共享内存区、维护目标进程的数据和查找Binder引用和Binder节点操作。因此,本文提出使用消息队列的方式代替原生Binder中的共享内存的方式实现Binder进程间的通信。通过为每个进程绑定一个消息队列,从而将binder_lock全局锁的同步互斥问题化解成对每个消息队列的消息的同步互斥问题。因此,便将原来的大锁化解成多个小锁。从而提高Binder在多核和高并发情形下的性能。
本文最后对优化后的Binder与原生的Binder的通信性能进行测试和分析。测试结果表明优化后的Binder相对与原生的Binder在多核和高并发平台两种情形下的性能提高了10%左右。同时,由于基于消息队列的Binder相对与原生Binder多了一次数据的拷贝,导致优化后的Binder在单核和小并发情形下的性能略低于原生的Binder。在后续的工作中,需要继续对Binder在单核、小并发量情形和传输大数据的情形继续进行优化。
来源:半壳优胜鲸鱼幸运星转载请保留出处和链接!
本文链接:http://87cpy.com/289438.html
本站部分内容来源网络如有侵权请联系删除