北航研究生課程程序語(yǔ)言設(shè)計(jì)原理教程第14章.ppt
《北航研究生課程程序語(yǔ)言設(shè)計(jì)原理教程第14章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《北航研究生課程程序語(yǔ)言設(shè)計(jì)原理教程第14章.ppt(40頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第14章 進(jìn)程交互機(jī)制和并發(fā)程序設(shè)計(jì)語(yǔ)言,如果說(shuō)忙等待是人們?cè)O(shè)計(jì)、實(shí)現(xiàn)并發(fā)程序的最初嘗試。信號(hào)燈理論則為進(jìn)程交互的同步與互斥的研究打下了基礎(chǔ)。 70年代結(jié)構(gòu)化程序設(shè)計(jì)已經(jīng)比較成熟,人們利用結(jié)構(gòu)程序的概念為并發(fā)機(jī)制提供較高層的機(jī)制,并設(shè)計(jì)了一系列并發(fā)程序設(shè)計(jì)語(yǔ)言。 基于變量共享的并發(fā)機(jī)制提出了條件臨界區(qū)、監(jiān)控器、路徑表達(dá)式等技術(shù)。 70年代末把結(jié)構(gòu)化與通信相結(jié)合提出了遠(yuǎn)程過(guò)程調(diào)用和會(huì)合機(jī)制。 80年代又有多原語(yǔ)范型的機(jī)制出現(xiàn)。,14.1 基于變量共享的高層并發(fā)機(jī)制 條件臨界區(qū) 條件臨界區(qū)(Condition Critieal Region簡(jiǎn)稱CCR)將共享變量顯式地置于叫做資源的區(qū)域內(nèi) 每個(gè)進(jìn)程
2、在自己的進(jìn)程體內(nèi)指明要訪問(wèn)的條件臨界區(qū),而同一臨界區(qū)可出現(xiàn)在不同進(jìn)程之中(誰(shuí)進(jìn)誰(shuí)用) 首先在資源中聲明共享變量: resource r(共享變量聲明) 例:resource sema( s:int :=n ) region r when B do S end region sema when s0 do s:= s-1 end // P操作 region sema do s:= s+1 end // V操作,例: 用CCR實(shí)現(xiàn)例12-4的生產(chǎn)者與消費(fèi)者 pragram PRODUCER_CONSUMER_CCR var buf:TYPE; var empty:sema,full:sem
3、a; resource sema:(empty := 1,full := 0); process PRODUCER i:1..M:: loop PRODUCERi 產(chǎn)生一條消息m; deposit: region sema when empty0 do empty := empty - 1 end; buf := m; region sema do full := full + 1 end; end loop; end; process CONSUMER j:1..N:: loop fetch: region sema when full0 do full:= full - 1
4、end; m=buf; region sema do empty := empty + 1 end; CONSUMERj 消費(fèi)者取出的這條消息m; end loop; end; end PRODUCER_CONSUMER_CCR.,條件臨界區(qū)評(píng)價(jià) 條件臨界區(qū)最主要的優(yōu)點(diǎn)是概念清晰。此外: 無(wú)需輔助標(biāo)志和變量即可描述共享變量的任何進(jìn)程交互 程序編譯時(shí)即可保證互斥 一個(gè)進(jìn)程創(chuàng)建一個(gè)條件不需顧及其它條件是否與此條件有關(guān) 易于程序正確性證明 體現(xiàn)了共享數(shù)據(jù)傳遞的方便 它的致命缺點(diǎn)是低效(和信號(hào)燈相比)。此外: 進(jìn)程和共享變量耦合太緊 臨界區(qū)利寫(xiě)不利讀,一多了就太散,因而也難修改,監(jiān)控器 Dijk
5、stra建議是把分散在整個(gè)程序中的region語(yǔ)句進(jìn)一步集中成為一個(gè)模塊叫做監(jiān)控器(monitor)。 program monitor monitor Mname:: 共享數(shù)據(jù)聲明并初始化; proc op1 () is end; ... proc opn () is end; end; process Pname i:1..N:: 局部數(shù)據(jù)聲明并初始化 begin : call Mname.opi (實(shí)參表); : end begin 初始化,激活進(jìn)程 end monitor.,例: 有界緩沖區(qū)的監(jiān)控器實(shí)現(xiàn)算法 monitor BOUNDED_BUFFER::
6、var buf1..q:TYPE; var frout :=1,rear :=1,count := 0; var not_fall:cond; //當(dāng)count 0 示信為真 proc deposit (data :TYPE) is while count = q do wait (not_full) end; buf rear := data; rear := (rear mod q) +1; count := count+1; signal (not_empty); end; proc fetch (var result :TYPE) is while count=0 do
7、 wait (not_empty) end; result := buf front; front := (front mod q) +1; count := count -1; signal (not_full); end; end BOUNDED_BUFFER.,以監(jiān)控器實(shí)現(xiàn)條件同步的技術(shù) (1) 復(fù)蓋條件變量 (2) 傳遞條件 (3) 有無(wú)占先對(duì)競(jìng)爭(zhēng)的并發(fā)進(jìn)程影響是很大的,由于不占先在被喚醒進(jìn)程執(zhí)行之前,監(jiān)控器不能拒絕另一進(jìn)程進(jìn)入它.(見(jiàn)下例*) (4) 為了防止條件信號(hào)被偷,發(fā)信號(hào)的進(jìn)程直接將條件傳入被喚醒的進(jìn)程。(見(jiàn)下例**) (5) 會(huì)合同步 進(jìn)程交互是客戶/服務(wù)器(C/S
8、)關(guān)系時(shí),為此兩交互進(jìn)程必須會(huì)合(rendezvou)才能得到服務(wù)。如不能到達(dá)會(huì)合的同步點(diǎn)則要相互等待。(見(jiàn)下例***),例* 以監(jiān)控器作信號(hào)燈 monitor SEMAPHORE:: var s:= 0; var pos:cond; //當(dāng)s0,pos示信為真 proc P( ) is while s=0 do wait (pos) end; s:= s-1; end; proc V( ) is s := s+1; signal (pos); end; end SEMAPHORE.,例*: 以監(jiān)控器實(shí)現(xiàn)的FIFO信號(hào)燈 monitor SEMAPHORE:: var s=0; var
9、 pos :cond; //當(dāng)V中pos隊(duì)列非空示真 proc P( ) is if s0 then s:= s-1 endif; if s=0 then wait(pos) endif; end; proc V( ) is if empty(pos) then s:= s+1 endif; if not empty(pos) then signal(pos) endif; end; end SEMAPHORE. 注:本例中“”號(hào)表示和前一個(gè)語(yǔ)句并行執(zhí)行的語(yǔ)句,以下同.,例*** 貪睡的理發(fā)師的模擬解 monitor BARBER_SHOP:: var barber := 0,chair
10、 :=0,open =0; var barber_available :cond //當(dāng)barber0 示真 var chair_occupied :cond //當(dāng)chair0示真 var choor_open:cond //當(dāng)open=0示真 proc get_haircut( ) is //顧客調(diào)用 while barber=0 do wait (barber_available) end; barber := barber-1; chair := chair+1; signal (chair_occupied); while open=0 do wai
11、t (door_open) end; open := open-1; signal (customer_left); end; proc get_next_customer( ) is proc finished_cut ( ) is end BARBER_SHOP.,,見(jiàn)下一頁(yè),proc get_next_customer( ) is //理發(fā)師調(diào)用 barber := barber+1; signal (barber_available); while chair=0 do wait (chair_occupied) end; chair := chair-1; end; p
12、roc finished_cut ( ) is //理發(fā)師調(diào)用 open := open+1; signal (door_open); while open0 do wait (customer_left) end; end;,各種語(yǔ)言實(shí)現(xiàn)監(jiān)控器時(shí)的原語(yǔ)語(yǔ)義差異 監(jiān)控器有三個(gè)特征:第一,監(jiān)控器封裝了共享變量,共享變量?jī)H能由監(jiān)控器內(nèi)的過(guò)程訪問(wèn)。第二,監(jiān)控器內(nèi)的過(guò)程都是互斥地執(zhí)行的。因而共享變量不能并發(fā)訪問(wèn)。第三,條件同步由wait和signal操作實(shí)現(xiàn) 程序設(shè)計(jì)語(yǔ)言Mesa包括以上三個(gè)特征。UNIX采用上述條件同步。監(jiān)控器有時(shí)不一定必須互斥。也可以采用其它辦法實(shí)現(xiàn)條件同步,(1) 實(shí)現(xiàn)條
13、件同步的各種信號(hào)機(jī)制 自動(dòng)信號(hào)AS:只要wait加上條件就可以不用signal原語(yǔ)了.即省去檢查signal是否執(zhí)行的開(kāi)銷,程序員也不必操心是否用錯(cuò) 信號(hào)和繼續(xù)SC:當(dāng)無(wú)占先時(shí)發(fā)信號(hào)的進(jìn)程繼續(xù)執(zhí)行.直至它進(jìn)入等待或返回之前,其它進(jìn)程是不許進(jìn)入監(jiān)控器的 信號(hào)和出口SX:既然被占了先,發(fā)信號(hào)的進(jìn)程也就不等了.立即從監(jiān)控器出口或從過(guò)程返回 信號(hào)和等待SW:發(fā)信號(hào)的進(jìn)程被人占先之后處于監(jiān)控器內(nèi)等待,直到它能再次獲得互斥訪問(wèn),恢復(fù)執(zhí)行 信號(hào)和急等SU:發(fā)信號(hào)進(jìn)程被人占先之后也要等待,但保證在監(jiān)控器有新的進(jìn)程進(jìn)入之前先使它得到恢復(fù),(2) 嵌套監(jiān)控器中的互斥 在磁盤調(diào)度器之類的應(yīng)用中,一個(gè)進(jìn)程首先要爭(zhēng)取進(jìn)
14、入磁盤去尋址,找到地址后讀/寫(xiě),這樣就要設(shè)計(jì)兩個(gè)監(jiān)控器 一個(gè)管理粗的磁盤資源,進(jìn)程進(jìn)入或釋放。另一個(gè)管理讀/寫(xiě)區(qū),進(jìn)程互斥地讀寫(xiě)。這兩個(gè)監(jiān)控器是嵌套的 每一時(shí)刻只有一個(gè)進(jìn)程進(jìn)入監(jiān)控器,調(diào)用某個(gè)過(guò)程,我們稱它是閉式調(diào)用.在嵌套監(jiān)控器之中,這種方式容易引起死鎖。 開(kāi)式調(diào)用是若有嵌套調(diào)用發(fā)生時(shí)上層互斥自動(dòng)解開(kāi),待調(diào)用返回后上層監(jiān)控器又重新閉合(獲得)互斥,路徑表達(dá)式 1974年Campbell和Habermann提出以路徑表達(dá)式直接控制進(jìn)程順序的建議 路徑表達(dá)式是就每一資源在其開(kāi)始聲明時(shí),就在其上定義操作的約束。 path deposit,fetch end //deposit和fetch并發(fā)執(zhí)行
15、path deposit;fetch end //deposit必須先于fetch執(zhí)行 path1:(deposit;fetch) end //只能有一條路徑(但可多次執(zhí)行此路徑),兩操作交替互斥執(zhí)行. path N:(1:(deposit);1:(fetch)) end //deposit和fetch是一一對(duì)應(yīng)地互斥激活,先執(zhí)行deposit,完成的deposit個(gè)數(shù)不超過(guò)N次,且可多于fetch完成的個(gè)數(shù).由路徑表達(dá)式指明的同步約束,編譯時(shí)即可保證. 優(yōu)點(diǎn)是程序員可直接控制過(guò)程的執(zhí)行,正文清晰。但當(dāng)同步化依賴過(guò)程參數(shù)或監(jiān)控器的狀態(tài)時(shí),表達(dá)能力差。,14.2 基于消息傳遞的高層并發(fā)機(jī)制,14
16、.2.1 異步消息傳遞 chan (:,,:) 其中:為傳到信道上的數(shù)據(jù)域名(可缺省)和類型。例如: chan input (char); chan disk_access(cylinder,block,count :int, buffer:char*); char output 1...N(1...M:char);,異步通信的過(guò)濾器 chan input (char),output (1..MAXLINE:char); char_to_Line:: var line 1..MAXLINE:char,i:int :=1; loop receive input (li
17、ne i); while line i =CR and i 18、et of int; var pending :queue of int; var index:int,kind :op_kind,unitid :int; //units可用資源以整數(shù)代號(hào)初始化,reply初始化為零 loop receive request(index,kind,unitid); case kind = ACQUIRE = if avail 0 then //正常分配 avail := avail-1; unitid := remove (units); send reply index (unitid); endif; 19、if avail = 0 then //記住index號(hào)客戶未分 insert (pending,index) //插入阻塞隊(duì)pending endif; 接下一張,case kind = RELEASE = if empty (pending) then avail := avail+1; insert (units,unitid); endif; if not empty(pending) then //分配unitid號(hào)資源 index := remove (pending); send reply index (uniti 20、d); endif; end case; end loop; client i:1..N: var unitid :int; send request (i,ACQUIRE,0); receive reply i (unitid); //使用unitid號(hào)資源然后釋放它,發(fā)以下消息: send release (i,RELEASE,unitid); 客戶/服務(wù)器進(jìn)程的特點(diǎn)是send,receive是對(duì)等的,服務(wù)器要應(yīng)答消息。本算法有N個(gè)客戶一個(gè)服務(wù)器。用其它主控程序創(chuàng)建clienti,當(dāng)它發(fā)送request后,接著執(zhí)行replyi,如發(fā)現(xiàn)未分配(未應(yīng)答)則在本處等待,直至 21、確已分配unitid/=0再使用它。,14.2.2 同步消息傳遞 通信著的順序進(jìn)程CSP (1) 通信語(yǔ)句,A::...B!e... //B!e 是輸出語(yǔ)句,目標(biāo)是B B::...A?x... //A?x 是輸入語(yǔ)句,源自A進(jìn)程 ! 信道名 () ? 信道名 (),我們把求最大公約數(shù)做成一服務(wù)器進(jìn)程GCD??蛻暨M(jìn)程client每向它發(fā)送一對(duì)整數(shù),它求出結(jié)果發(fā)回客戶。 GCD ::var x,y:int; loop client ? args( x,y) while x/=y do if xy then x:= x-y endif if yx then y:=y- 22、x endif; end; client ! result (x); end loop; client進(jìn)程在準(zhǔn)備好數(shù)據(jù)v1,v2和結(jié)果存儲(chǔ)空間r之后,應(yīng)有以下語(yǔ)句: ...GCD! args(v1,v2); GCD ? result (r)... 其中args,result是信道端口名。,(2) 選擇通信 Dijkstra 1975年提出的(警)衛(wèi)式命令。即設(shè)一布爾條件B,僅當(dāng)B為 真才執(zhí)行消息傳遞語(yǔ)句。所以,也叫衛(wèi)式通信。衛(wèi)式通信語(yǔ)句的一般形式是: B;CS; 選擇通信語(yǔ)句一般形式是: if G1S1 G2S2 ... GnSn endif,GCD::var x, 23、y:int; while (i:1..N) client i? args(x,y) do while x /= y do if xy then x:= x-y endif if x 24、:int; sieve j-1? p;print (p) ; //只打印“第一個(gè)”收到的 loop sievej-1 ? next; if next mod p /=0 then sieve i+1 ! next endif; end loop;,客戶/服務(wù)器的同步通信實(shí)現(xiàn) 文件服務(wù)器的同步實(shí)現(xiàn)算法 File_Server i:1..N:: var fname:string,args:TYPE; var more :bool; var 局部緩沖區(qū),快速緩存,磁盤地址等; while (c:1..M) client c? open (fname) do // 25、如名為fname的文件已打開(kāi): client ! open_reply( ); more := true; while more = true do if client c? read(args) then 調(diào)處理讀入數(shù)據(jù)的過(guò)程; client c! read_reply(results); if client c? write(args) then 調(diào)處理寫(xiě)的過(guò)程; client c ! write_reply(results); if client c? close() then 調(diào)關(guān)閉文件操作; more := false 26、 endif; end; end.,client j:1..M :: var serverid :int; while (i:1..N) File_Serveri! open(“foo”) do serverid := i; File_serveri ? open_reply(serverid); end. //以下寫(xiě)使用該進(jìn)程的代碼。例如,讀可寫(xiě): File_Serverserverid ! read(訪問(wèn)參數(shù)); File_Serverserverid ? read_reply(results); ... //最后要有關(guān)閉文件的消息,14.2.2.4 同 27、步通信的底層實(shí)現(xiàn),,,,,應(yīng)用程序,分布式并發(fā)核示意圖,應(yīng)用程序,原語(yǔ) 例程,,描述子 緩沖區(qū),,網(wǎng)絡(luò)接口,,本地核,描述子 緩沖區(qū),,原語(yǔ) 例程,網(wǎng)絡(luò)接口,,,本地核,同步通信在最基本的操作上和異步是一樣的。當(dāng)前實(shí)現(xiàn)同步有兩種策略: (1) 集中式的同步實(shí)現(xiàn),,,,,,,,,CH,Pi,Pj,,,,,,集中管理,它易于檢查進(jìn)程匹配情況。然而,在分布式系統(tǒng)中,這樣多次來(lái)回通信增加了系統(tǒng)通信開(kāi)銷,往往成為并行核的瓶頸。,分散式同步實(shí)現(xiàn),用異步通信原語(yǔ)實(shí)現(xiàn)分散式同步通信,為每個(gè)要求通信的進(jìn)程設(shè)立一個(gè)匹配信道(輸出語(yǔ)句為一端,輸入語(yǔ)句為另一端)和一個(gè)應(yīng)答信道。并于有輸入語(yǔ)句的進(jìn)程設(shè)阻塞等候隊(duì)列.如果 28、輸出/入語(yǔ)句不出現(xiàn)在警衛(wèi)子句內(nèi)處理程序要簡(jiǎn)單得多,輸出語(yǔ)句出現(xiàn)在警衛(wèi)子句中情況會(huì)變得更復(fù)雜。因此CSP和Occam的最初版本均不允許在警衛(wèi)子句中有輸出語(yǔ)句,14.3 遠(yuǎn)程過(guò)程調(diào)用和會(huì)合,調(diào)用進(jìn)調(diào),服服務(wù)進(jìn)程 從創(chuàng)建到完成,,call RPC,,,,,調(diào)用進(jìn)程,,調(diào)用進(jìn)調(diào),進(jìn)入同步點(diǎn) in,等待,數(shù)據(jù)通信 完成,call,,,,,,,會(huì)合,(等待),RPC,會(huì)合,14.3.1 遠(yuǎn)程過(guò)程調(diào)用RPC,call Mname.opname(AP_list);,每個(gè)模塊在各自的地址空間。每當(dāng)有遠(yuǎn)程調(diào)用時(shí),服務(wù)模塊創(chuàng)建一服務(wù)進(jìn)程,調(diào)用進(jìn)程一直延遲到整個(gè)服務(wù)完成。如果同一時(shí)間只允許一個(gè)遠(yuǎn)程調(diào)用進(jìn)入本模塊,就實(shí) 29、現(xiàn)了對(duì)共享數(shù)據(jù)的互斥訪問(wèn)。多個(gè)調(diào)用者們就要排隊(duì)等待。,現(xiàn)在的問(wèn)題是塊內(nèi)各操作進(jìn)程在有了遠(yuǎn)程調(diào)用之后如何同步與互斥。一個(gè)辦法最簡(jiǎn)單;塊內(nèi)同一時(shí)間只能有一個(gè)進(jìn)程執(zhí)行(不管是局部調(diào)用還是遠(yuǎn)程的一起排隊(duì))。這樣最安全,隱含地實(shí)現(xiàn)了互斥,共享變量無(wú)需保護(hù)。但不可取,喪失了大量潛在的并發(fā)性。 現(xiàn)在多數(shù)RPC實(shí)現(xiàn)是支持模塊內(nèi)并發(fā)執(zhí)行的。其實(shí)現(xiàn)模塊可以如前所述的異步、同步、衛(wèi)式同步模式。遠(yuǎn)程調(diào)用只是其并發(fā)成分之一。我們舉例說(shuō)明。,14.3.2 會(huì)合,call Mname.Pname.Opi(ARG_list),RPC是進(jìn)程級(jí)的(一個(gè)過(guò)程一個(gè)進(jìn)程),且允許有多個(gè)并發(fā)進(jìn)程進(jìn)入封裝這些操作的模塊。會(huì)合是操作級(jí)的( 30、一個(gè)進(jìn)程有若干個(gè)操作),調(diào)用的是進(jìn)程輸出的操作,因而,操作不能是并行的,只能同時(shí)有一個(gè)操作在執(zhí)行。而每個(gè)操作都有自己的等候隊(duì)列。正是由于定義輸出操作,帶來(lái)了衛(wèi)式通信的方便性。會(huì)合的一般形式是:,in Op1 and B1 by e1s1 .... Opn and Bn by ensn end in,call Op1 and B1 by e1 .... Opn and Bn by en end call,,會(huì)合實(shí)現(xiàn)過(guò)濾器,Baffer :: op deposit(data:TYPE),fetch(var result:TYPE); var buf1..q:TYPE var front 31、 :=1,rear := 1,count !=0; loop in deposit (data) and count 0 do result := buffront; front := front mod n+1; count := count -1 end; end loop.,有界緩沖區(qū)buf1..q是本地機(jī)上的共享變量。front,rear,count為控制和警衛(wèi)變量,14.3.3 Ada的任務(wù),Ada的任務(wù)結(jié)構(gòu),task TNAME is entry ENAME (FP_list); //可以多個(gè) end TNAME; task body TNAME is 32、局部聲明; begin accept ENAME (FP_list) is //對(duì)應(yīng)多個(gè) 語(yǔ)句序列; end ENAME; end TNAME; 任務(wù)激活后就是一個(gè)進(jìn)程。其它進(jìn)程通過(guò) call TNAME.ENAME (AP_list);,Ada的通信與同步,(1)簡(jiǎn)單選擇 (2) 否則選擇 (3) 衛(wèi)式選擇 (4) 延時(shí)選擇,14.4 多原語(yǔ)的并發(fā)機(jī)制,進(jìn)程交互主要技術(shù)的回顧,,忙等待,,信號(hào)燈,條件臨界區(qū),監(jiān)控器,同步消息傳遞,異步消息傳遞,遠(yuǎn)程過(guò)程調(diào)用/會(huì)合,路徑表達(dá)式,多原語(yǔ)交互,面向 過(guò)程,面向 消息,面向操作,,,多原語(yǔ)并發(fā)程序表示法 module Mname 可見(jiàn)Op(操作) 33、聲明; //輸出操作 body 局部變量聲明; 初始化代碼; 過(guò)程聲明(包括輸出的和局部的); //proc或in 進(jìn)程聲明(Mname 內(nèi)的進(jìn)程); end. 同步和異步調(diào)用Op: call Mname.Op(ARG_List) //同步用call send Mname.Op(ARG_List) //異步用send,調(diào)用者 被調(diào)用者 效果 call proc (遠(yuǎn)程)過(guò)程調(diào)用 call in 會(huì)合 send proc 動(dòng)態(tài)過(guò)程創(chuàng)建 send in 簡(jiǎn)單異步消息傳遞,14.4.3 SR語(yǔ)言 14.5 并發(fā)程序設(shè)計(jì)語(yǔ)言,高級(jí)程序設(shè) 34、計(jì)語(yǔ)言擴(kuò)充并發(fā)機(jī)制,最早可溯源至PL/1和Algal-68。20多年以來(lái),隨著各種并發(fā)機(jī)制的研究推出了數(shù)十種具有并發(fā)機(jī)制的高級(jí)程序設(shè)計(jì)語(yǔ)言。直到目前,還沒(méi)有一種并發(fā)程序設(shè)計(jì)語(yǔ)言能統(tǒng)治并發(fā)程序設(shè)計(jì)整個(gè)領(lǐng)域。其原因是硬件背景、應(yīng)用領(lǐng)域和程序設(shè)計(jì)模型的多樣性。,主要的并發(fā)程序設(shè)計(jì)語(yǔ)言 語(yǔ)言 年代 并發(fā)機(jī)制 備注 DP 1978 CCR+RPC Edison 1978 CCR Argus 1982 CCR+RPC+原子事務(wù) Lynx 1991 RPC+會(huì)合+CCR Concurrent Euclid 監(jiān)控器(SW) Concurrent Pascal 35、1975 監(jiān)控器(SW) Modula-3 1985 監(jiān)控器(SC)+協(xié)例程和鎖的包 Path Pascal 1979 監(jiān)控器+路徑表達(dá)式 Pascal Plus 1979 監(jiān)控器(SU) Turing Plus 1983 監(jiān)控器(SC+SW) Mesa 1979 監(jiān)控器(SC)+RPC Emerald 監(jiān)控器+RPC(面向?qū)ο?,,,語(yǔ)言 年代 并發(fā)機(jī)制 備注 Actor 異步消息傳遞(基于對(duì)象) PLITS 1979 異步消息傳遞 NIL 1982 異步消息傳遞+會(huì)合 Gypsy 1979 異步消息傳遞 CONIC 異步消息傳遞 CSP 1980 同步消息傳遞 Joyce 同步消息傳遞 Occam 1987 同步消息傳遞 Concurrent C 1985 會(huì)合+異步發(fā)送 Concurrent C++ 1987 會(huì)合 Ada 1983 會(huì)合 SR 1982 多共享+消息原語(yǔ) 92年SR2.0 Star Mod 1980 多消息原語(yǔ) Linda 1986 帶共享元組空間的消息原語(yǔ) Java 1996 類庫(kù)支持多原語(yǔ),,
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點(diǎn)美食推薦
- XX國(guó)有企業(yè)黨委書(shū)記個(gè)人述責(zé)述廉報(bào)告及2025年重點(diǎn)工作計(jì)劃
- 世界濕地日濕地的含義及價(jià)值
- 20XX年春節(jié)節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)人到場(chǎng)心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫(huà)之美生活之美
- 節(jié)后開(kāi)工第一課輕松掌握各要點(diǎn)節(jié)后常見(jiàn)的八大危險(xiǎn)
- 廈門城市旅游介紹廈門景點(diǎn)介紹廈門美食展示
- 節(jié)后開(kāi)工第一課復(fù)工復(fù)產(chǎn)十注意節(jié)后復(fù)工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓(xùn)
- 深圳城市旅游介紹景點(diǎn)推薦美食探索
- 節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)勿忘安全本心人人講安全個(gè)個(gè)會(huì)應(yīng)急
- 預(yù)防性維修管理
- 常見(jiàn)閥門類型及特點(diǎn)
- 設(shè)備預(yù)防性維修
- 2.乳化液泵工理論考試試題含答案