簡體   English   中英

如何確保在基於事件的並發設置中涵蓋所有案例?

[英]How to make sure all cases are covered in an event-based concurrent setup?

SICP 3.4.2中,存在不同過程中事件順序的問題。

假設我們有兩個過程,一個具有三個有序事件(a,b,c),一個具有三個有序事件(x,y,z)。 如果兩個進程同時運行,並且對它們的執行方式沒有任何限制,則事件的20種可能的排序與這兩個進程的單獨排序一致。

20次訂購

在程序員設計該系統時,我們將不得不考慮這20種排序中的每一種的影響,並檢查每種行為是否可以接受。 隨着過程和事件數量的增加,這種方法很快變得笨拙。

是否有任何工具/最佳實踐可以幫助程序員確保涵蓋每個邏輯上不同的情況?

如果程序員可以在事件之間定義一組事件和約束,並且該工具將返回事件的所有有效順序(識別並分組類似的循環模式),那將是很好的。

給定可能的事件流列表,程序員將能夠添加/刪除/修改約束。

這個問題對我來說很重要,因為我遇到的大多數錯誤都與某些競爭狀況或某些未處理的案例有關。

我真的不想在某些高級類型的系統上使用特定的語言,我寧願有一個與技術/語言無關的解決方案,可以充當某種助手-設計和記錄系統:帶有事件,約束(和狀態)。

這將是我的聖杯。

我在以下主題中尋找解決方案:形式方法,形式驗證,序言(由於窮舉搜索和邏輯),並發,依賴類型,基於事件的編程,許多類型的測試,按合同設計,循環復雜性; 但是他們都沒有給我答案。 此外,深入類型理論似乎是一個過大的殺傷力。

“三個有序事件(a,b,c)”
這取決於存在多少交錯狀態以及需要共享哪些資源(在哪個時間內)。 查閱並發理論書籍,了解完整的語言理論。 您需要以某種方式形式化流程的依賴關系[再次依賴於代碼]

競爭條件和未處理的案例可以減少到范圍和資源上,因此從廣義上講,您需要限制表達的可能性,以便根據錯誤案例來正式/自動地驗證代碼,或者您需要限制資源。

在語言/編程中,這是通過例如模式,良好的API,語言構造等來完成的。但是,這沒有通用的功能,它取決於用例。

競爭條件和未處理的情況看起來像您需要更強的鍵入和自動資源約束,或者您的軟件設計可能有缺陷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM