EOS技術(shù)白皮書學習筆記(三) - 應(yīng)用程序的確定性并執(zhí)行

本文由幣乎社區(qū)(bihu.com)內(nèi)容支持計劃贊助

在看本文前,最好先了解區(qū)塊鏈相關(guān)概念:比特幣,以太坊,錢包,智能合約,秘鑰等

應(yīng)用程序的確定性并行執(zhí)行

相信你和我一樣,剛開始看這個標題的時候有點懵逼,這講的啥意思呀?后來我查閱了許多資料以及他人的分析,這才有點理解其中的意思,下面我來說說我是怎么理解的。首先,我把這個標題分解成3個:應(yīng)用程序、確定性、并行執(zhí)行,分解后就明了了,我知道應(yīng)用程序是什么,但是不知道它說的確定性和并行執(zhí)行是什么意思。于是,就需要查詢確定性和并行執(zhí)行,得出的結(jié)果是:

并行執(zhí)行:同時獨立地安裝和使用程序集的多個版本的能力。并行執(zhí)行可以應(yīng)用于應(yīng)用程序和組件以及 .NET Framework。允許多個程序集在同一臺計算機上共存和同時執(zhí)行,對于支持公共語言運行庫中可靠的版本控制至關(guān)重要。--百度百科

簡單的說就是,多個程序可以同時執(zhí)行。

確定性并行執(zhí)行: 由于執(zhí)行個體之間的同步、競爭和干擾,并行程序的執(zhí)行存在著不確定性問題,即程序在相同輸入下多次執(zhí)行可能得到不同的結(jié)果。不確定性給并行程序在開發(fā)、調(diào)試、測試、容錯和安全等方面都帶來了挑戰(zhàn),嚴重降低了并行程序的可靠性,阻礙了并行程序的發(fā)展。確定性并行技術(shù)通過控制并行程序執(zhí)行個體間的同步、競爭和干擾,使程序的執(zhí)行結(jié)果僅依賴于輸入。確定性并行技術(shù)能夠從根本上解決了目前并行程序存在的諸多問題,提升了并行程序的可靠性,給并行程序的發(fā)展帶來了新的機遇。

結(jié)合并行執(zhí)行可以這樣理解,要使多個程序同時執(zhí)行,并且能更穩(wěn)更安全的執(zhí)行,就需要用到確定性并行技術(shù),理解了嗎?

EOS中也運用了這樣的技術(shù),在白皮書中是這樣說的:

  • 區(qū)塊鏈共識取決于確定性(可重現(xiàn))的行為。
    1.意味著所有的并行程序都不能是“不確定”的,例如互斥或加鎖是不確定的,就不能用。
    2.沒有鎖,就需要一些方法來保證所有賬戶只能讀寫自己的私有數(shù)據(jù)庫
    3.所以每個賬戶都必須按照順序處理消息,EOS的并行性在賬戶級別。
  • EOS將消息傳遞到獨立的線程中
    1.判斷并行的可能性
    2.每個賬戶的狀態(tài)只取決于傳遞給它們的消息
    3.進度表,我這里理解成消息的執(zhí)行順序,這個順序在區(qū)塊產(chǎn)生后是確定的,而在產(chǎn)生過程中是不確定的,是由區(qū)塊生產(chǎn)者按照并行算法決定。
  • 當腳本生成新消息時,他不會立即發(fā)送,而是被安排在下一個周期。因為接收方可能會在另一個線程中主動修改自己的狀態(tài)。

通信延遲優(yōu)化

通常一個賬戶方一條消息到另外一個賬戶,并不是立即就能收到的,其中需要一定的時間,這個時間就叫做延遲時間。EOS不希望有這個延遲時間存在,他希望能夠在一個區(qū)塊內(nèi)來回交換消息。他是怎么做的呢?
EOS將區(qū)塊分成了幾個循環(huán),循環(huán)又分成了多個線程,每個線程包含一個交易列表,每個交易包含一組要傳遞的消息。這個結(jié)構(gòu)可以看成為一棵樹,在這個樹中交替的層被順序的并行的處理,我們看下面這張圖


執(zhí)行流程

在一個循環(huán)中生成的交易可以在后續(xù)的任何一個循環(huán)或者區(qū)塊中被發(fā)送。 區(qū)塊生產(chǎn)者會持續(xù)不斷的向區(qū)塊中添加循環(huán)直到最大的墻上時間到了或者沒有更多的新交易要發(fā)送。

可以對一個區(qū)塊使用靜態(tài)分析來驗證同一個循環(huán)內(nèi)不存在兩個線程包含同一帳戶下對交易的變更。 只要保持不變一個區(qū)塊就可以并行的運行所有的線程。

有點繞,其實可以這樣理解,以上做法都是為了讓賬戶和賬戶之間通信更快更及時。

只讀消息處理

只讀消息的處理,EOS對于無需更新狀態(tài)的消息處理是可以并行的,只要特定的只讀消息處理程序被包含在特定的循環(huán)內(nèi)的一個或多個線程中就可以。

多賬戶原子交易

有時我們需要確保消息自動的被多個賬戶傳遞和接收(原子性操作)。 在這種情況下,消息會被放在同一個交易內(nèi),賬戶會被分配到同一個線程,并且消息被順序的添加。 這種情況對性能是不理想的,當用戶使用涉及到“賬單”時,他們將在交易內(nèi)以賬戶唯一索引被列入其中(為了確保交易成功)。

但是,基于性能和成本原因最好減少涉及兩個或多個重度帳戶的原子性操作。

部分區(qū)塊鏈狀態(tài)的評估(組件化,模塊化的判斷)

1.大規(guī)模的區(qū)塊鏈技術(shù)組件應(yīng)該是模塊化的

  • 每個人都不應(yīng)該運行所有的東西,特別是他們只需要運行一個小應(yīng)用時
  • 例如,一個交易所的應(yīng)用,只需要向用戶展示交易狀態(tài),而不需要與其他應(yīng)用程序(社交媒體或其他)有狀態(tài)關(guān)聯(lián)。

2.EOS允許完整節(jié)點選擇要運行的任何程序子集

  • 傳遞給其他應(yīng)用的消息可以被安全的忽略掉,因為應(yīng)用程序的狀態(tài)完全由傳遞給它的消息派生。
  • 這與其他帳戶的溝通有一些重要的影響。 最重要的是,不能假定其他帳戶的狀態(tài)可以在同一臺機器上訪問。 這也意味著,雖然很容易啟用“鎖”來允許一個帳戶同步調(diào)用另一個帳戶,如果其他帳戶不駐留在內(nèi)存中,這種設(shè)計模式就會出現(xiàn)問題。
  • 所有賬戶帳戶間的狀態(tài)通信必須通過包含在區(qū)塊鏈中的消息進行。

自主最優(yōu)任務(wù)安排

1.EOS系統(tǒng)不能強制阻止區(qū)塊生成這向其他賬戶發(fā)送的任何消息
2.每個區(qū)塊生產(chǎn)者都可以根據(jù)處理交易所需的計算復雜性和時間做出自己的主觀預測。
3.在網(wǎng)絡(luò)層面上,所有的交易都會收取一個固定的計算帶寬成本,區(qū)塊生產(chǎn)者也可以使用自己的算法來測量資源的使用。
4.一般來說,只要一個區(qū)塊生產(chǎn)者認為一個交易是有效的,并且所消耗的資源是可控的,那么所有的其他區(qū)塊生產(chǎn)者也會接受,但是交易可能需要最長1分鐘才能找到生產(chǎn)者。為什么是一分鐘,因為一分鐘內(nèi)交易可以在21個區(qū)塊生產(chǎn)者之間流轉(zhuǎn)一遍,如果還沒有找到,那么這個交易就不會被打包了。
5.這種對計算、資源成本的主觀評估將使區(qū)塊鏈不必精確地去度量運行一個任務(wù)需要多長時間。有了這個設(shè)計,就不需要精確地數(shù)指令,這將極大地增加優(yōu)化的機會,而不會打破“共識”。

配合學習筆記系列文章一起讀會更好理解哦

上一篇:EOS技術(shù)白皮書學習筆記(二)- 賬戶系統(tǒng)

下一篇:EOS技術(shù)白皮書學習筆記(四) - 令牌模型和資源使用

本文首發(fā)于微信公眾號:lin-mingtan 歡迎關(guān)注交流 .

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容