溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

CSP的開發(fā)過程是怎樣的

發(fā)布時間:2021-12-16 17:55:26 來源:億速云 閱讀:177 作者:柒染 欄目:互聯(lián)網(wǎng)科技

本篇文章為大家展示了CSP的開發(fā)過程是怎樣的,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

程序架構(gòu)的研究在上世紀七八十年代還處于原始階段,當時的大部分研究都在研究如何編寫順序代碼,而現(xiàn)在所熟知的goto語句那時也正在被討論,還沒有正式引入。而面向?qū)ο蟮姆妒秸谇那牡淖兂删幊痰幕?/section>
一切都顯得風平浪靜,好像一切都在隨著預想的慢慢發(fā)展。這時C.A.R Hoare (簡稱Tony Hoare發(fā)現(xiàn)了一個問題,那就是并發(fā)沒有得到太多的關(guān)注,于是他開始著手解決這個問題。

Tony Hoare

說起Tony Hoare,初聽比較陌生。但是他的另一項研究很多程序員不會陌生,那就是排序算法中的快速排序算法(Quick Sort)。而這個聞名于世的算法是他26歲時發(fā)明的,當然除了這些,Tony Hoare在程序設(shè)計語言的定義、設(shè)計、數(shù)據(jù)結(jié)構(gòu)、算法和操作系統(tǒng)等許多方面都有很多影響深遠的成果。并因為“對程序設(shè)計語言的定義和設(shè)計方面的基礎(chǔ)性貢獻”在1980年獲得圖靈獎。
Hoare在發(fā)明快速排序后的第二年,接到了新的任務(wù),為公司的新機器設(shè)計一個新的高級語言,而當時他正好搞到一份Algol 60報告的復印件,并參加了Dijkstra(學算法的時候大部分人都聽過Dijkstra算法,沒錯,就是這個人發(fā)明的)等人舉辦的Algol 60培訓班。

當時Hoare學著學著就想,不如直接把Algol 60在公司的新機器上進行實現(xiàn)。于是Hoare把這個想法提交給公司,在公司同意后,開始設(shè)計和實現(xiàn)Algol 60的一個自己版本。Hoare在一開始就制定了明確的目標,即系統(tǒng)要安全可靠,生成的目標碼要簡潔,工作區(qū)數(shù)據(jù)要緊湊,過程和函數(shù)的人口和出口要清晰、嚴密等,還明確了整個編譯過程采用一次掃描等原則。
而這次實現(xiàn)不僅十分順利,并且大受歡迎,在世界各國開發(fā)的Algol 60版本中效率、可靠性和方便性都非常出色。因此得到了國際學術(shù)界的重視。國際信息處理聯(lián)盟于是任命霍爾為2.1工作組(Working Group 2.1)的負責人,這個工作組的任務(wù)是維護和發(fā)展Algol?;魻柟徊回摫娡鞒衷O(shè)計了Algol X以繼承與發(fā)展Algol 60。正是在Algol X的設(shè)計中,霍爾發(fā)明了CASE語句。
Hoare還有很多重要的研究和成果。而我們今天要說的CSP理論就是其中非常重要的一點。
 

CSP

CSP的開發(fā)過程是怎樣的


Hoare在發(fā)現(xiàn)并發(fā)操作沒有引起過多的關(guān)注后,開始著手進行解決。終于在1978年,Hoare在ACM中發(fā)表了經(jīng)典的“Communicating Sequential Processes”論文。在這篇論文中,Hoare認為輸入和輸出是兩個被忽略的編程原語,尤其在并發(fā)代碼中。于是Hoare在CSP論文中展示了如何應(yīng)用通信來建模輸入和輸出,并提供了如何用CSP來解決一些并發(fā)問題,比如尋找10000以內(nèi)的素數(shù)。通過這種方式最終達到“在進程間正確的通信”。當然這個思想在當時是非常超前的,

事實上,1978年的論文中,CSP只是一個用來展示通信順序進程的能力的一個簡單的編程語言。連Hoare本身都覺得這個想法過于超前而有些不切實際,他直接在論文中悲觀的寫道:

Thus the concepts and notations introduced in this paper (although described in the next section in the form of a programming language fragment) should not be regarded as suitable for use as a programming language, either for abstract or for concrete programming. They are at best only a partial solution to the problems tackled.


介紹的概念和符號應(yīng)該不被認為適合作為一種編程語言,無論是抽象的還是具體的編程。他們最多只是一種解決問題的方式。

Hoare擔心自己所展示的技術(shù)對于未來的并發(fā)編程的研究并沒有任何作用,這種技術(shù)或許沒有語言能夠按照他的想法來實現(xiàn)。但是接下來的6年里,關(guān)于CSP的想法被提煉成對并發(fā)系統(tǒng)進行數(shù)學建模的方法--進程微積分。并提供了代數(shù)規(guī)則來對系統(tǒng)進行變化來分析它們的并發(fā)和效率。而這正式將CSP的想法投入到并發(fā)編程的實踐中。

Go語言

在CSP提出后,有些語言嘗試將Hoare提出的輸入和輸出作為原語納入到自己的語言體系中,比如OCCAM并發(fā)處理語言。和傳統(tǒng)的加鎖方式不同,CSP理論中不允許進程對其他進程的變量賦值,進程之間只能通過通信原語來實現(xiàn)數(shù)據(jù)交換和協(xié)作。但是這些語言都沒能真正地為這些原語提供支持。大多數(shù)流行語言都支持共享和內(nèi)存訪問同步到CSP的消息傳遞樣式。而采用CSP理論的語言也有,但是基本都沒有得到廣泛的采用。
直到Go語言出現(xiàn),正式將CSP的原則納入到核心原則,并提供了通信的原語支持channel。正因為如此,并發(fā)被認為是Go語言的優(yōu)勢之一。并讓Go語言在分布式系統(tǒng)、云原生系統(tǒng)和系統(tǒng)中間件中迅速占領(lǐng)了市場。而其他語言基于共享內(nèi)存的并發(fā)模型,在大型和復雜系統(tǒng)中變得很難正確使用。
當然Go還有其局限性,因為CSP的理解成本問題,Go同時也支持傳統(tǒng)的加鎖方式,也支持共享內(nèi)存的方式。不過Go已經(jīng)向其他語言證明CSP的可行性和優(yōu)越處。并且提出了經(jīng)典的CSP核心概念:

Do not communicate by sharing memory; instead, share memory by communicating.


“不要以共享內(nèi)存的方式來通信,相反,要通過通信來共享內(nèi)存?!?/em>

而由于Go語言的推廣和效果,使得CSP的概念變得流行起來,目前很多語言在嘗試將CSP納入到語言體系中并提供對Hoare提出原語的支持。

上述內(nèi)容就是CSP的開發(fā)過程是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

csp
AI