事務和事務記憶體

2021-06-16 20:31:22 字數 1822 閱讀 1119

看到solidot報道,英特爾下一代haswell處理器硬體支援事務記憶體,感覺有點小意外。

其實很早以前(2023年),我就對事務記憶體關注過一段時間,當時,號稱要支援的事務記憶體的處理器只有(據我所知)只有sun公司的rock處理器,可是這個rock,一再跳票,跳到sun隕落也沒發布,到現在,oracle也沒發布支援事務記憶體的處理器。事務記憶體(尤其是硬體實現的)的前景貌似不太明朗。

2023年9月,ibm發布了bluegene/q處理器,這是第一款支援事務記憶體的處理器。但是,這並不意味著事務記憶體重見天日了。

2023年2月7日,最大的處理器廠商發表文章,聲稱支援硬體事務記憶體,其通過transactional synchronization extensions(tsx)的元件來實現的,事務記憶體的前景終於開始明朗起來。

那麼,什麼是事務,什麼又是事務記憶體呢。

根據維基百科整理,事務的定義為:

資料庫事務(簡稱: 事務)是資料庫管理系統執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。在資料庫管理系統中,事務必須滿足acid性質,即原子性,一致性,隔離性和永續性。原子性指的是事務中的動作要麼全部執行,要麼乙個都不執行;一致性指的是任何時刻,資料庫必須處於一致性狀態,即必須滿足某些預先設定的條件;隔離性是指乙個事務不能看見其他未提交事務所涉及到的內部物件的狀態,而永續性則是指乙個已提交的事務對資料庫系統的改變必須是永久的。

那事務記憶體又是什麼,根據國防科大張鐸等人的《事務儲存結構的實現》一文,事務記憶體是這樣介紹的(為了準確,以下為直接引文,完成記憶體詳見《事務儲存結構的實現》一文):

事務儲存(transactional memory,tm)的使用是解決上述存在問題乙個很好的辦法[1]。通過將不同並行執行的執行緒事務化,用事務操作來代替鎖機制能降低程式設計的複雜性。事務是被單執行緒執行的對記憶體進行讀寫的有序操作序列,其特性包括:原子性、隔離性、一致性和永續性。通常事務的執行過程為:呼叫事務入口函式(begin_transaction)開始執行事務,當事務執行完畢後呼叫提交函式(commit_transaction)開始提交工作,提交過程分為三個階段(請求提交、開始提交和完成提交),執行完提交後此事務也就執行完畢,從而繼續執行下面的事務。但如果事務在執行或提交過程中發生衝突或者錯誤,則通過其特有的回滾機制 (rollback)返回到此事務入口繼續執行。

為了實現事務的這些特性,需有乙個很好的tm系統來支援事務資料的版本管理(version management)和事務的衝突管理(contention management)。版本管理同時對新值(事務提交後可見)和原始的舊值(事務執行過程中發生了回滾的恢復資料)進行管理。根據資料存放方式的不同tm系統區分版本管理為:積極版本管理(eager version management)和懶惰版本管理(lazy version management)。積極版本管理是將新值置於目標儲存區中,這樣在提交時新值能夠很快的得到執行,極大地降低了提交的時延;而懶惰版本管理是將原始的舊值置於目標儲存區,雖然會增加提交的延時但是降低了當事務發生回滾後執行的延時。衝突管理是不同事務執行過程中對共享資源訪問引發衝突而進行的衝突檢測以及管理的機制。衝突管理有積極的(eager)和懶惰的(lazy)兩種策略,如果衝突在讀資料或寫資料時立刻被發現而進行仲裁,這種衝突檢測是積極的;如果衝突是在事務進行提交時才發現並仲裁的,這種衝突檢測則是懶惰的。

可以看出,事務記憶體的出現就是為了解決並行程式設計儲存一致性和效能矛盾的問題,傳統的鎖機制會導致效能低下,並且可擴充套件星差,而事務記憶體,則嘗試在體系結構和程式設計師之間定義乙個新的一致性,也即事務一致性,對應的記憶體模型叫做事務記憶體。從上面一段話可以看出,硬體事務記憶體有很多問題需要解決,包括版本管理,以及衝突管理,而對於硬體,只有有限的資源,因此,這就限制了事務的長度,使(硬體)事務記憶體的實現難度和實用性大大降低,這也許是rock難產的原因之一。

事務和事務隔離級別,Spring事務傳播和隔離級別

一 事務有四大特性,也即原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 1 原子性 即不可分割,事務要麼全部被執行,要麼全部不執行。如果事務的所有子事務全部提交成功,則所有的資料庫操作被提交,資料庫狀態發生變化 如果有子事務失敗,...

唯讀事務和沒有事務

在專案中看到 transactional readonly true 註解 該屬性用於設定當前事務是否為唯讀事務,設定為 true 表示唯讀,false 則表示可讀寫,預設值為 false 例如 transactional readonly true 了解到是唯讀事務,網上搜了下唯讀事務和沒有事務的...

MySQL事務和事務回滾

1 定義 一件事從開始發生到結束的整個過程 2 作用 確保資料一致性 3 事務和事務回滾應用 1 mysql中sql命令會自動commit到資料庫 show variables like autocommit 2 事務應用 1 開啟事務 mysql begin mysql 一條或多條sql語句 此時...