本文由幣乎社區(bihu.com)內容支持計劃贊助
5.應用程序的確定性並行執行
相信你和我一樣,剛開始看這個標題的時候有點懵逼,這講的啥意思呀?後來我查閱了許多資料以及他人的分析,這才有點理解其中的意思,下面我來說說我是怎麼理解的。首先,我把這個標題分解成3個:應用程序、確定性、並行執行,分解後就明了了,我知道應用程序是什麼,但是不知道它說的確定性和並行執行是什麼意思。於是,就需要查詢確定性和並行執行,得出的結果是:
並行執行:同時獨立地安裝和使用程序集的多個版本的能力。並行執行可以應用於應用程序和組件以及 .NET Framework。允許多個程序集在同一台計算機上共存和同時執行,對於支持公共語言運行庫中可靠的版本控制至關重要。--百度百科
簡單的說就是,多個程序可以同時執行。
確定性並行執行: 由於執行個體之間的同步、競爭和干擾,並行程序的執行存在著不確定性問題,即程序在相同輸入下多次執行可能得到不同的結果。不確定性給並行程序在開發、調試、測試、容錯和安全等方面都帶來了挑戰,嚴重降低了並行程序的可靠性,阻礙了並行程序的發展。確定性並行技術通過控制並行程序執行個體間的同步、競爭和干擾,使程序的執行結果僅依賴於輸入。確定性並行技術能夠從根本上解決了目前並行程序存在的諸多問題,提升了並行程序的可靠性,給並行程序的發展帶來了新的機遇。
結合併行執行可以這樣理解,要使多個程序同時執行,並且能更穩更安全的執行,就需要用到確定性並行技術,理解了嗎?
EOS中也運用了這樣的技術,在白皮書中是這樣說的:
區塊鏈共識取決於確定性(可重現)的行為。 1.意味著所有的並行程序都不能是「不確定」的,例如互斥或加鎖是不確定的,就不能用。 2.沒有鎖,就需要一些方法來保證所有賬戶只能讀寫自己的私有資料庫 3.所以每個賬戶都必須按照順序處理消息,EOS的並行性在賬戶級別。
EOS將消息傳遞到獨立的線程中 1.判斷並行的可能性 2.每個賬戶的狀態只取決於傳遞給它們的消息 3.進度表,我這裡理解成消息的執行順序,這個順序在區塊產生後是確定的,而在產生過程中是不確定的,是由區塊生產者按照並行演算法決定。
當腳本生成新消息時,他不會立即發送,而是被安排在下一個周期。因為接收方可能會在另一個線程中主動修改自己的狀態。
通信延遲優化
通常一個賬戶方一條消息到另外一個賬戶,並不是立即就能收到的,其中需要一定的時間,這個時間就叫做延遲時間。EOS不希望有這個延遲時間存在,他希望能夠在一個區塊內來回交換消息。他是怎麼做的呢? EOS將區塊分成了幾個循環,循環又分成了多個線程,每個線程包含一個交易列表,每個交易包含一組要傳遞的消息。這個結構可以看成為一棵樹,在這個樹中交替的層被順序的並行的處理,我們看下面這張圖在一個循環中生成的交易可以在後續的任何一個循環或者區塊中被發送。 區塊生產者會持續不斷的向區塊中添加循環直到最大的牆上時間到了或者沒有更多的新交易要發送。

可以對一個區塊使用靜態分析來驗證同一個循環內不存在兩個線程包含同一帳戶下對交易的變更。 只要保持不變一個區塊就可以並行的運行所有的線程。
有點繞,其實可以這樣理解,以上做法都是為了讓賬戶和賬戶之間通信更快更及時。
只讀消息處理
只讀消息的處理,EOS對於無需更新狀態的消息處理是可以並行的,只要特定的只讀消息處理程序被包含在特定的循環內的一個或多個線程中就可以。
多賬戶原子交易
有時我們需要確保消息自動的被多個賬戶傳遞和接收(原子性操作)。 在這種情況下,消息會被放在同一個交易內,賬戶會被分配到同一個線程,並且消息被順序的添加。 這種情況對性能是不理想的,當用戶使用涉及到「賬單」時,他們將在交易內以賬戶唯一索引被列入其中(為了確保交易成功)。
但是,基於性能和成本原因最好減少涉及兩個或多個重度帳戶的原子性操作。
部分區塊鏈狀態的評估(組件化,模塊化的判斷)
1.大規模的區塊鏈技術組件應該是模塊化的
2.EOS允許完整節點選擇要運行的任何程序子集
傳遞給其他應用的消息可以被安全的忽略掉,因為應用程序的狀態完全由傳遞給它的消息派生。
這與其他帳戶的溝通有一些重要的影響。 最重要的是,不能假定其他帳戶的狀態可以在同一台機器上訪問。 這也意味著,雖然很容易啟用「鎖」來允許一個帳戶同步調用另一個帳戶,如果其他帳戶不駐留在內存中,這種設計模式就會出現問題。
所有賬戶帳戶間的狀態通信必須通過包含在區塊鏈中的消息進行。
自主最優任務安排
EOS系統不能強制阻止區塊生成這向其他賬戶發送的任何消息
每個區塊生產者都可以根據處理交易所需的計算複雜性和時間做出自己的主觀預測。
在網路層面上,所有的交易都會收取一個固定的計算帶寬成本,區塊生產者也可以使用自己的演算法來測量資源的使用。
一般來說,只要一個區塊生產者認為一個交易是有效的,並且所消耗的資源是可控的,那麼所有的其他區塊生產者也會接受,但是交易可能需要最長1分鐘才能找到生產者。為什麼是一分鐘,因為一分鐘內交易可以在21個區塊生產者之間流轉一遍,如果還沒有找到,那麼這個交易就不會被打包了。
.這種對計算、資源成本的主觀評估將使區塊鏈不必精確地去度量運行一個任務需要多長時間。有了這個設計,就不需要精確地數指令,這將極大地增加優化的機會,而不會打破「共識」。
IOS專用讚賞碼
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!
本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!
請您繼續閱讀更多來自 林明潭 的精彩文章:
TAG:林明潭 |