每個(gè)進(jìn)程有自己的地址空間。兩個(gè)進(jìn)程中的地址即使值相同,實(shí)際指向的位置也不同。進(jìn)程間通信一般通過操作系統(tǒng)的公共區(qū)進(jìn)行。
同一進(jìn)程中的線程因?qū)偻坏刂房臻g,可直接通信。
不僅是系統(tǒng)內(nèi)部獨(dú)立運(yùn)行的實(shí)體,而且是獨(dú)立競爭資源的實(shí)體。
線程也被稱為輕權(quán)進(jìn)程,同一進(jìn)程的線程共享全局變量和內(nèi)存,使得線程之間共享數(shù)據(jù)很容易也很方便,但會(huì)帶來某些共享數(shù)據(jù)的互斥問題。
許多程序?yàn)榱颂岣咝室捕际怯昧司€程來編寫。
父子進(jìn)程的派生是非常昂貴的,而且父子進(jìn)程的通訊需要ipc或者其他方法來實(shí)現(xiàn),比較麻煩。而線程的創(chuàng)建就花費(fèi)少得多,并且同一進(jìn)程內(nèi)的線程共享全局存儲(chǔ)區(qū),所以通訊方便。
線程的缺點(diǎn)也是由它的優(yōu)點(diǎn)造成的,主要是同步,異步和互斥的問題,值得在使用的時(shí)候小心設(shè)計(jì)。
只有進(jìn)程間需要通信,同一進(jìn)程的線程share地址空間,沒有通信的必要,但要做好同步/互斥mutex,保護(hù)共享的全局變量。線程擁有自己的棧。同步/互斥是原語primitives.
而進(jìn)程間通信無論是信號(hào),管道pipe還是共享內(nèi)存都是由操作系統(tǒng)保證的,是系統(tǒng)調(diào)用.
線程間通信:由于多線程共享地址空間和數(shù)據(jù)空間,所以多個(gè)線程間的通信是一個(gè)線程的數(shù)據(jù)可以直接提供給其他線程使用,而不必通過操作系統(tǒng)(也就是內(nèi)核的調(diào)度)。
進(jìn)程間的通信則不同,它的數(shù)據(jù)空間的獨(dú)立性決定了它的通信相對比較復(fù)雜,需要通過操作系統(tǒng)。以前進(jìn)程間的通信只能是單機(jī)版的,現(xiàn)在操作系統(tǒng)都繼承了基于套接字(socket)的進(jìn)程間的通信機(jī)制。這樣進(jìn)程間的通信就不局限于單臺(tái)計(jì)算機(jī)了,實(shí)現(xiàn)了網(wǎng)絡(luò)通信。
一、進(jìn)程間的通信方式
管道( pipe ):管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系的進(jìn)程間使用。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系。
有名管道 (namedpipe) : 有名管道也是半雙工的通信方式,但是它允許無親緣關(guān)系進(jìn)程間的通信。
信號(hào)量(semophore ) : 信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來控制多個(gè)進(jìn)程對共享資源的訪問。它常作為一種鎖機(jī)制,防止某進(jìn)程正在訪問共享資源時(shí),其他進(jìn)程也訪問該資源。因此,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。
消息隊(duì)列( messagequeue ) : 消息隊(duì)列是由消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)。消息隊(duì)列克服了信號(hào)傳遞信息少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
信號(hào) (sinal ) : 信號(hào)是一種比較復(fù)雜的通信方式,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生。
共享內(nèi)存(shared memory ) :共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問。共享內(nèi)存是最快的 IPC 方式,它是針對其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。它往往與其他通信機(jī)制,如信號(hào)兩,配合使用,來實(shí)現(xiàn)進(jìn)程間的同步和通信。
套接字(socket ) : 套解口也是一種進(jìn)程間通信機(jī)制,與其他通信機(jī)制不同的是,它可用于不同及其間的進(jìn)程通信。
二、線程間的通信方式
鎖機(jī)制:包括互斥鎖、條件變量、讀寫鎖* 互斥鎖提供了以排他方式防止數(shù)據(jù)結(jié)構(gòu)被并發(fā)修改的方法。* 讀寫鎖允許多個(gè)線程同時(shí)讀共享數(shù)據(jù),而對寫操作是互斥的。* 條件變量可以以原子的方式阻塞進(jìn)程,直到某個(gè)特定條件為真為止。對條件的測試是在互斥鎖的保護(hù)下進(jìn)行的。條件變量始終與互斥鎖一起使用。
信號(hào)量機(jī)制(Semaphore):包括無名線程信號(hào)量和命名線程信號(hào)量
信號(hào)機(jī)制(Signal):類似進(jìn)程間的信號(hào)處理
線程間的通信目的主要是用于線程同步,所以線程沒有像進(jìn)程通信中的用于數(shù)據(jù)交換的通信機(jī)制。
-
通信
+關(guān)注
關(guān)注
18文章
6070瀏覽量
136419 -
線程
+關(guān)注
關(guān)注
0文章
505瀏覽量
19756
原文標(biāo)題:線程通信與進(jìn)程通信的區(qū)別
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論