<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    yeshucheng
    追逐自己,追逐方向,心隨悟所動
    posts - 24,comments - 24,trackbacks - 0

     

    進程的創(chuàng)建

    進程本身是一個動態(tài)的實體,所以它本身在運行期間也通過創(chuàng)建進程系統(tǒng)調(diào)用,并且可以創(chuàng)建多個新進程,對于這句話我同樣使用圖解的方式來做個簡單說明:


    當一個進程創(chuàng)建一個新進程時,會存在兩種可能的方式執(zhí)行:

     

    1.         父進程(繼續(xù)執(zhí)行)和子進程并行的執(zhí)行;

    2.         父進程等待部分或者全部子進程終止執(zhí)行;

    而新進程的地址空間也存在兩種可能:

    1.         子進程是父進程的一個COPY了;

    2.         載入一個程序來運行;

    到這里就有點感覺Erlang的進程思想端倪了(開始我咋看感覺有點象,但是越深入后就覺得確實就是到這個思想才形成了Erlang程序語言的意義本質(zhì),個人揣度啊,哈哈)既然有那么點思想的感覺,那我們就開始進入探討階段了。也正是下面即將要講到的問題才印證一句話:技術(shù)的本質(zhì)還存留在簡單事物之上(個人總結(jié),哈哈)。

    進程間通信

    進程間通信有兩種本質(zhì)的方式:

    1.         共享緩沖區(qū)提供通信;

    2.         消息傳遞;

    大家有沒有認真看到上面的四個字“消息傳遞”,對沒錯就是消息傳遞!那這里我就感覺是否就是這里和Erlang的語言所談到的消息傳遞呢?盡管一個處于操作系統(tǒng)級別,而另一處于語言級別,但是初看給我的感覺是原理是否一致呢?呵呵,那就讓我們來看看OS級別的進程間通信本質(zhì)起了。

    消息傳遞系統(tǒng)

    消息系統(tǒng)的功能是允許進程與其他進程之間通訊不必借助共享數(shù)據(jù),他們各自獨立。而這里要說到一個概念,什么是IPC?

    如果我們先不看它定義,而了解具體做法,看是一個什么效果。

     

    到這里為止是不是感覺又和我們說的Erlang非常類似呢?真的沒錯。。。那就繼續(xù)往下看看它到底如何而做了。有以下幾種方法實現(xiàn)和Send/Receive操作的方法:

    u       直接或者間接通信

    u       對稱或不對稱通信

    u       自動或手動緩沖

    u       發(fā)送copy或者引用

    u       定長消息或者變長消息

    為了更好的說明上面各自的特征是如何引入和體現(xiàn)的,使用兩個典型的進程p,q作為兩個進程之間的通訊來加以演示。

    直接通信:

           這里就是兩個非常赤裸的而且是非常利索的通信了:


    u       send(P,message) P發(fā)送一個消息給進程Q

     

    u       receive(Q,message) 從進程Q中接收一個消息

    特點

    1.         每對需要通信的進程之間自動建立一條鏈路,進程只需要知道彼此的進程標識符(Pid);

    2.         一個連接就只連接到這兩個進程;

    因此這種機制在尋址上是對稱的;發(fā)送者與接收者進程都必須要指明通信一方。不過這里要談到它的一種特例:發(fā)送者需要知道接收者,但是接收者不需要知道發(fā)送者,其原語定義為:

    SendP,Message 發(fā)送一個消息給P

    Receiveid,Message)從任意進程中接受一個消息;

    由于通信是一種交互行為,所以一般情況來說我們有發(fā)送自然希望存在一個回復(fù)的交互動作,而像這種特例就無法知道它的這種情形,因此這種情況也是我們不希望所見的。

    間接通信

           間接通信中消息發(fā)送和接收則是通過郵箱(實際中更多的是端口方式,這里為了更好理解我們比作郵箱方式)進行的。若把郵箱看成一個對象,進程就可以把消息郵寄(放置)在其中,顯而易見既然能夠放入自然也就可以從郵箱中取出了。而每一個郵箱都有一個唯一的地址(標識符),進程可以通過不同的郵箱和其它進程通信了。兩個進程只有共享一個郵箱才可以進程通信。因此基本構(gòu)建和原語定義圖示如下:

    SendA,M):發(fā)送消息(Message)給郵箱A

    ReceiveA,M):從郵箱A接收到消息(M);


    特點:

     

    1.         只有在兩個進程間有一個共享郵件箱下才能兩者建立一個連接;

    2.         一條鏈路可以連接兩個或者更多的進程;

    3.         每對通信進程之間可以同時存在多個不同的鏈路,而且每條鏈路對應(yīng)一個郵箱;

    那我們來看看直接通信和間接通信最大的區(qū)別是什么?沒錯,其實間接通信存在中間一個共享的郵箱,而正是這種方式才在以后的應(yīng)用中得到廣泛利用。這里就聯(lián)想到Erlang語法的:Pid!M是否感覺很相似(注:M消息通知標示符為Pid的進程操作事件,而且具體在接受中也存在得到一個receive來獲取消化了),在我看來它就是典型使用到了這個原理機制。這里來看一道例題:假如有兩個進程P1,P2P3都存在共享郵箱A,而且P2P3正是從A中接收。那么誰 接收到P1發(fā)送來的消息呢?圖示:


    這里我們就需要具體討論問題的實質(zhì)了:

     

    對照上面說講到的間接通信特點,我們知道一條鏈路最多連接兩個進程,同時最多允許任意選擇進程來接收消息(現(xiàn)在這個例子中只存在P2,P3),所以他們兩者只允許單獨接收消息而不是同時接收消息。至于消息會發(fā)送給誰,這就需要系統(tǒng)本身來確定接收者了。因此,一個郵箱可能為一個進程或者操作系統(tǒng)所有,不難看出這個例子存在以下情況:


    一旦擁有郵箱A的進程終止時,郵箱也就同時要消失,隨后向該郵箱發(fā)送消息的進程就會被告知郵箱不存在。這里需要強調(diào)的是作為操作系統(tǒng)本身來說擁有一個郵箱是獨立的不依賴于任何進程。所以操作系統(tǒng)有必要提供一種機制允許一個進程來專門做這個工作了,那是什么工作呢?具體有以下特征:

    u       創(chuàng)建一個新郵箱;

    u       通過這個郵箱發(fā)送和接收信息;

    u       刪除一個郵箱;

    接下來就開始單獨討論所謂的這個“郵箱”的單獨機制能夠引發(fā)的一些線索了。

    進程同步

           通過消息傳送來進程通信,這個是它本質(zhì)所在。但是消息傳送可能有阻塞或者無阻塞——同步和異步。所以這里就存在對于發(fā)送者和接收者的阻塞或無阻塞現(xiàn)象的討論了,對于他們有一下特點:

    1.         發(fā)送進程阻塞:發(fā)送進程被阻塞,直到接收進程接收消息;

    2.         發(fā)送進程無阻塞:發(fā)送進程發(fā)送消息并且立刻恢復(fù)執(zhí)行;

    3.         接收進程阻塞:接收進程被阻塞,知道一個消息為有效;

    4.         接收進程無阻塞:接收進程獲取一個有效或空消息;

    以上的方式還可以組合形成。

    既然有阻塞和無阻塞現(xiàn)象,那立刻可以聯(lián)想到我們的郵箱擴展成一種管道方式呢?沒錯這里就需要講解下面的定義形成。

    緩沖

           這里只想對于三個定義了解:

    u       零長度:無緩沖消息系統(tǒng);

    u       限定長度:

    自動緩沖

    u       無限長度:

    這里單獨把限定長度和無限長度提取出來定義:

    限定長度:消息隊列中存在N個消息,發(fā)送者在發(fā)送未滿的隊列中無阻塞。一旦隊列滿則阻塞直到出現(xiàn)空閑空間。

    無線長度:消息隊列有無限個消息,也不會阻塞發(fā)送者。

           下面我們就要通過這些概念擴展到程序開發(fā)中經(jīng)常會遇到的實例。

    (待續(xù)。。。。。。)

    posted on 2008-12-14 12:42 葉澍成 閱讀(1219) 評論(0)  編輯  收藏 所屬分類: 計算機系統(tǒng)
    主站蜘蛛池模板: 久久久久久国产a免费观看黄色大片| 久久国产精品免费专区| 午夜私人影院免费体验区| 亚洲三级在线视频| xxxx日本免费| 亚洲三级高清免费| 国产成人免费a在线视频app | 亚洲国产成人影院播放| 草久免费在线观看网站| 亚洲国产精品人人做人人爽| 色哟哟国产精品免费观看| 免费国产在线观看| 成人免费视频一区二区| 国产亚洲福利精品一区| 18女人毛片水真多免费| 亚洲伊人久久大香线蕉结合| 免费的涩涩视频在线播放| 精品女同一区二区三区免费播放 | 亚洲精品偷拍视频免费观看 | 中文字幕高清免费不卡视频| 国产亚洲AV无码AV男人的天堂 | 可以免费观看的毛片| 亚洲男人电影天堂| 国产成人啪精品视频免费网| a在线视频免费观看在线视频三区| 亚洲夜夜欢A∨一区二区三区| 99久久精品免费视频| 亚洲人成www在线播放| 四虎影在线永久免费观看| 中文字幕无码毛片免费看| 亚洲制服在线观看| 四虎影视精品永久免费| 嫩草在线视频www免费观看| 久久亚洲最大成人网4438| 亚洲成人一区二区| 亚洲视频免费一区| 三年片在线观看免费观看大全中国| 亚洲黄色免费网址| 全亚洲最新黄色特级网站| 91久久成人免费| rh男男车车的车车免费网站|