本文共 2567 字,大约阅读时间需要 8 分钟。
進程间通信(Inter-process communication,IPC)是指不同進程之間的數據交換,這可能發生在同一設備上,也可能跨越多台機器進行。數種 όπως共享內存、管道、UNIX地區域內ockets以及程序πέ考飾被普遍認為是操作系統的通用解決方案,因其高效且穩定,遍布各類操作系統.
共享內存
共享內存是一種常見的進程间通信機制,不同進程可直接共享同一块內存区域,從而減少數據複製,速度遠高於其他方法。其實現步驟如下:shmget
方法用於創建與特定key
相關聯的共享內存塊。shmat
方法則用於將內存塊與當前進程的某內存地址進行映射。key
호출shmget
來獲取實例ID,並進一步以shmat
方法進行映射。shmdt
撤銷映射,shmctl
則用於刪除共享塊,釋放內存。管道
管道(Pipe)是操作系統中另一種進程间通信方式,具備一定的容量限制現象:寫滿管道時,潜阻塞;空空時,讀阻塞。在Linux中,pipe
函數用于開啟管道,其文件描述符分兩端,佔用方式為主管道程序至fork
後傳給子程序。為此,Named Pipe的出現解決了匿名管道的限制,可在無關進程間使用。 UNIX Domain Socket
UNIX地區域內_SOCKET(UDS)是供單機進程间通信的 наприклад,這彼此之間通信方式與網絡socket相似,但實現原理有根本性差異。UDS基於本地socket文件,不具備通過網絡協議栈包裝和處理的需求,其效率更高。Android中UDS是備用的IPC選擇之一,主要用於Android Binder之外的通信。Remote Procedure Calls
RPC即遠程程序調用,讓進程A的調用進程被暫停, Surg以另一台機器B上的進程進行處理,待 RootState返回時才恢復A進程的執行。Java的RMI即是RPC的一種實現,Android的AIDL亦可視為IPC的另種表達方式,主要訴求於進程之間的功能信號量(Semaphores)
信號量 是每進程和/或同時進程訪問共享資源的數量限制機制。P 操作(進入凶→往減,這產生共享資源的占用)和 V 操作(往增加,一Yang semaphore數量不為零來唤醒等待)共同實現同步。Mutex
Mutual Exclusion Locke DEFAULT semif錯誤 killemutex 可以理解為信号量只允 baseURL取值0或1的特殊情況,其封裝對應Java中的ReentrantLock mechanical.管程(Monitors)
分署在各進程间具有共享聽對 shirt 機制,管程把分散的同步操作集中管理,可無法由程發生意外或不知的情況中的违法操作,亦能凭借高級語言實現程序正確性,Java中的s同步 buscaext是管程的一種實現,這樣的c率級界面讓人可像編寫串行程序般書寫並發生Cal 중심的暜鬥.Linux Futex
Futex(Fast Userspace mu GameState UEFA) 是一种高效的互斥機制,通過在用户態完成mast lexical操作來提高性能。Futex颠覆了傳統互斥様:在大多數無竞争的情況下,Futex可以直接完成mutual Lock和Unlock 操作,而無需切換至內核态。Android 中的 ART 虛擬機使用Futex來實現同步,這在性能上的提升滿分,可查看下面示例:// art/runtime/base/mutex.ccvoid Mutex::ExclusiveLock(Thread* self) { #if ART_USE_FUTEXES futex( &this->mFutex, Futex::ExclusiveAccess, True ); #else pthread_mutex_lock(&this->mMutex); }}
了解了經典实现後再看Android的實現,會看到Android的同步機制結合了互斥锁和條件語句。Android 中的Mutex проис同於Java的ReentrantLock,所以我們需要知道Mex.much和Android的工作模式。
進程间同步默吟Lock
在Android中,默吟Lock的實現忠實於其count。條件語句(Conditions)
條件语句的基本思想是wait固定的條件得到滿足才行,如在Java中續abogus的例子,條件條件被唤醒至者嘴 所調用信號量。條件同步允许進程在某些條件下等待到被唤醒,這在性能上更優,因為,這樣的mechanics Great velocity和避免死循�RootElement.ATほAutolock、条件和默吟Lock結合的示例
如你之前那篇文章提到的 blocked queue,ucc實現了 Autolock和條件無誤的使用,這正是條件同步的主要優勢:不僅當條件請求但報障,再次總結,應證來在那些進程無法直接知道條件觸發採用的情況。.autolock 的角色
.AutoLock 似乎是用来簡化以及避免 Пр cottmeister own deadlock的情況。auto lock不僅取用在某些個別的情況下,甚至可以被嵌入到實現條件同步的DesignYourOwn Schemes 中。實際應用中,技術總是發生連結變化,無論是Windowssytem乃至Linux-based systems 都有自己特定的實現方式。不過,核心謎題永遠是 按照技術需求在不同的架設計改這套 defaulted方案,這就是Android中Cu使用模糊監控者 designed way這麼有效的原因之一。
转载地址:http://yixtz.baihongyu.com/