安卓IPC机制之LocalSocket
LocalSocket作为安卓提供的一种IPC机制,可能应用层的同学比较陌生,我实际也是在这段时间做项目使用到才注意到它并去了解的。不过实际上framework层里面被频繁使用到了,例如我很久前写的博客 从源码看安卓应用的启动过程 里面提到其他进程和Zygote进程之间的通信使用的是LocalSocket。那么LocalSocket和Socket到底有什么不同呢? 官方文档 里面其实提到了它其实是基于UNIX-domain socket的:
Socket本来是用来做不同主机间的网络通信的,如果有人想拿来做本机的IPC通信就会发现它的性能堪忧(例如实现binder机制做不到的传输大文件),因为它需要走网络协议栈、打包拆包、计算校验等,如果是TCP还需要走三次握手和应答。
于是后面就发展出了UNIX-domain socket (LocalSocket),它的api和socket的基本一致,但是本质上只是一种IPC通信,不可和外部主机通信,但是因为IPC通信是可靠通信,直接将数据拷贝到目标进程内存即可,所以没有之前说的那些耗时的操作。
我们先来看看它的使用方式:
没错,看起来和普通Socket的用法很类似了。
性能是评判一种ipc进制好坏的重要指标,例如我们常用的Binder机制就是用了mmap机制实现了数据的一次拷贝提高了传输速度。
于是我写了一个 测试程序 来对比AIDL、LocalSocket和TCP Socket的传输速度。测试的逻辑大概是:
在我们的产品设备上得到的实际数据如下:
从上面的数据可以看出来LocalSocket虽然会比AIDL慢但是也差的不多,而tcp的耗时就比较多了。虽然我没有具体看过LocalSocket的底层原理,但是想来既然它在framework层被频繁使用,那么谷歌应该也应该会考虑到性能这一点。
优点:
缺点:
绛旓細net share ipc$ /d net share admin$ /d 娉ㄦ剰$鍚庢湁绌烘牸銆侰.澧炲姞涓涓叡浜: c:\net share mymovie=e:\downloads\movie /users:1 mymovie 鍏变韩...38. nlist[remote-dir][local-file]:鏄剧ず杩滅▼涓绘満鐩綍鐨勬枃浠舵竻鍗,骞跺瓨鍏ユ湰鍦扮‖鐩樼殑local-file銆 39. nmap[inpattern outpattern]:璁剧疆鏂囦欢鍚嶆槧灏鏈哄埗, ...
绛旓細濡傛灉瑕佽闂叾浠栧伐浣滅粍鐨勬垚鍛,闇瑕佸弻鍑烩滄暣涓綉缁溾,鐒跺悗浣犳墠浼氱湅鍒扮綉缁滀笂鍏朵粬鐨勫伐浣滅粍,鍙屽嚮鍏朵粬宸ヤ綔缁勭殑鍚嶇О,杩欐牱浣犳墠鍙互鐪嬪埌閲岄潰鐨勬垚鍛,涓庝箣瀹炵幇璧勬簮浜ゆ崲銆 闄ゆ涔嬪,浣犱篃鍙互閫鍑烘煇涓伐浣滅粍,鏂规硶涔熷緢绠鍗,鍙灏嗗伐浣滅粍鍚嶇О鏀瑰彉涓涓嬪嵆鍙備笉杩囪繖鏍峰湪缃戜笂鍒汉鐓ф牱鍙互璁块棶浣犵殑鍏变韩璧勬簮,鍙笉杩囨崲浜嗕竴涓伐浣滅粍鑰屽凡銆
绛旓細dbus鏄痜reedesktop涓嬪紑婧愮殑Linux IPC閫氫俊鏈哄埗,鏈韩Linux 鐨処PC閫氫俊鏈哄埗鍖呮嫭,绠¢亾(fifo),鍏变韩鍐呭瓨,淇″彿閲,娑堟伅闃熷垪,Socket绛夈傚湪Qt涓璂BUS鏄湁鍗曠嫭鐨勬ā鍧楃殑,...-qconfig local 浣跨敤鏈湴鐨剄config閰嶇疆鏂囦欢鏉ユ浛浠e叏閮ㄥ弬鏁伴厤缃,鏈夐渶瑕佺殑鍙互鍘荤爺绌朵笅,鍙互瑁佸壀鎺т欢绾у埆鐨勫弬鏁般 -depths <list> 鏄剧ず鐨勫儚绱犱綅娣,涔熸槸鏍规嵁...
绛旓細Avro鏄柊鐨勬暟鎹簭鍒楀寲鏍煎紡涓庝紶杈撳伐鍏凤紝灏嗛愭鍙栦唬Hadoop鍘熸湁鐨IPC鏈哄埗 ApacheAmbari: 鏄竴绉嶅熀浜嶹eb鐨勫伐鍏凤紝鏀寔Hadoop闆嗙兢鐨勪緵搴斻佺鐞嗗拰鐩戞帶銆侫pacheChukwa: 鏄竴涓紑婧愮殑鐢ㄤ簬鐩戞帶澶у瀷鍒嗗竷寮忕郴缁熺殑鏁版嵁鏀堕泦绯荤粺锛屽畠鍙互灏嗗悇绉嶅悇鏍风被鍨嬬殑鏁版嵁鏀堕泦鎴愰傚悎 Hadoop 澶勭悊鐨勬枃浠朵繚瀛樺湪 HDFS 涓緵Hadoop 杩涜鍚勭...
绛旓細0x2 鍖垮悕鐢ㄦ埛鏃犳硶杩炴帴鏈満ipc$鍏变韩 璇存槑:涓嶅缓璁娇鐢2,鍚﹀垯鍙兘浼氶犳垚浣犵殑涓浜涙湇鍔℃棤娉曞惎鍔,濡俿ql server 8銆佷笉鏀寔igmp鍗忚 hkey_local_machine\system\currentcontrolset\services\tcpip\parameters igmplevelreg_dword 0x0(榛樿鍊间负0x2) 璇存槑:璁板緱win9x涓嬫湁涓猙ug,灏辨槸鐢ㄥ彲浠ョ敤igmp浣垮埆浜鸿摑灞,淇敼娉ㄥ唽琛ㄥ彲浠...
绛旓細寮濮嬩箣鍓,寮虹儓寤鸿浣犲湪淇敼涔嬪墠浣滀竴涓郴缁熻繕鍘熺偣,浠ュ厤璇搷浣滃紩璧蜂笉蹇呰鐨勯夯鐑︺ 鐐瑰嚮鈥滃紑濮嬧濃啋鈥滆繍琛屸,杈撳叆regedit鍚庡洖杞,鎵撳紑娉ㄥ唽琛ㄧ紪杈戝櫒,瀹氫綅鍒癏KEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\Current Version\WPAEvents,鍦ㄥ彸杈瑰彸閿崟鍑籓OBETimer,鐒跺悗閫夋嫨淇敼,鑷冲皯淇敼涓涓瓧鑺,纭畾淇濆瓨銆 鐐瑰嚮鈥滃紑濮嬧濃啋鈥滆繍琛...
绛旓細浠ュ噺灏戝垎閰嶈祫婧愭墍淇濈暀鐨勬椂 闂.璺敱缂撳瓨椤硅祫婧愬垎閰嶅欢杩,鐩村埌寤虹珛杩炴帴涓烘.濡傛灉synattackprotect=2, 鍒橝FD鐨勮繛鎺ユ寚绀轰竴鐩村欢杩熷埌涓夎矾鎻℃墜瀹屾垚涓烘.娉ㄦ剰,浠呭湪TcpMaxHalfOpen鍜 TcpMaxHalfOpenRetried璁剧疆瓒呭嚭鑼冨洿鏃,淇濇姢鏈哄埗鎵嶄細閲囧彇鎺柦. 5) 绂佹C$銆丏$涓绫荤殑缂虹渷鍏变韩 HKEY_LOCAL_...
绛旓細姣忎釜鍒嗘敮涓繚瀛樿绠楁満杞欢鎴栧簲寤鸿涔嬩腑鏌愪竴鏂归潰鐨勪俊鎭笌鏁版嵁銆傛敞鍐岃〃涓牸鍒嗘敮鐨勫姛鑳藉涓嬶細HKEY-CLASSES-ROOT 鏂囦欢鎵╁睍鍚嶄笌搴旂敤鐨勫叧鑱斿強OLE淇℃伅 HKEY-CURRENT-USER 褰撳墠鐧诲綍鐢ㄦ埛鎺у埗闈㈡澘閫夐」鍜屾闈㈢瓑鐨勮缃紝浠ュ強鏄犲皠鐨勭綉缁滈┍鍔ㄥ櫒 HKEY-LOCAL-MACHINE 璁$畻鏈虹‖浠朵笌搴旂敤绋嬪簭淇℃伅 HKEY-USERS 鎵鏈夌櫥褰曠敤鎴风殑...