自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

.NET 4將支持用軟件實(shí)現(xiàn)的事務(wù)內(nèi)存:STM.NET

開(kāi)發(fā) 后端
微軟發(fā)布了.NET 4.0 Beta 1的一個(gè)單獨(dú)的新版本,其中包含了STM.NET,也就是Software Transactional Memory。微軟將STM.NET定義為:Software Transactional Memory(STM.NET)是一種可以高效隔離共享狀態(tài)的機(jī)制。

事務(wù)內(nèi)存是一種并行程序設(shè)計(jì)的方式,其來(lái)自于數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中的事務(wù)(Transaction)概念。事務(wù)內(nèi)存目前有兩種實(shí)現(xiàn)方式,基于軟件的STM(Software Transactional Memory)和基于硬件的HTM(Hardware Transacational Memory)。

雖然事物內(nèi)存的事務(wù)編程概念來(lái)自于數(shù)據(jù)庫(kù)的事務(wù),但在概念上還是有很大的區(qū)別的。
1 數(shù)據(jù)庫(kù)的 數(shù)據(jù)是存儲(chǔ)在磁盤上的,而在事物內(nèi)存技術(shù)中數(shù)據(jù)是存放在內(nèi)存的。
2 事物內(nèi)存技術(shù)中事務(wù)不滿足acid 中的d(durable) 性質(zhì),因?yàn)樗辉趦?nèi)存中有效。
3 事物內(nèi)存技術(shù)中事 務(wù)相對(duì)小的多。

最近,微軟發(fā)布了.NET 4.0 Beta 1的一個(gè)單獨(dú)的新版本,其中包含了STM.NET,也就是Software Transactional Memory。通常我們使用基于鎖的同步機(jī)制來(lái)控制對(duì)共享內(nèi)存的訪問(wèn),STM則是鎖之外的另一種選擇。

微軟將STM.NET定義為:Software Transactional Memory(STM.NET)是一種可以高效隔離共享狀態(tài)的機(jī)制。開(kāi)發(fā)人員可以將一段代碼標(biāo)記為“原子”事務(wù),并與其它并行運(yùn)行的事務(wù)代碼“隔離”開(kāi)來(lái)。

事務(wù)內(nèi)存(Transactional memory)在學(xué)術(shù)界被認(rèn)為是一項(xiàng)有前途的技術(shù),并且在當(dāng)前利用多核硬件提高程序擴(kuò)展性的大潮中,也作為一項(xiàng)受歡迎的技術(shù)被反復(fù)提及,其目的是使應(yīng)用程 序開(kāi)發(fā)人員可以利用STM的并發(fā)功能,將那些由專家開(kāi)發(fā)的組件組合在一起,事務(wù)內(nèi)存使這變得簡(jiǎn)單而安全。

軟件事務(wù)內(nèi)存 (STM) 是一種模擬數(shù)據(jù)庫(kù)事務(wù)的并發(fā)控制 機(jī)制來(lái)控制在并行計(jì)算時(shí)對(duì)共享內(nèi)存的訪問(wèn)控制。它是鎖的一種替代機(jī)制。在STM中,一個(gè)事務(wù)指的是一段讀、寫共享內(nèi)存的代碼。這些讀寫操作在邏輯上是一個(gè)獨(dú)立的單元,其中間狀態(tài)對(duì)于其它的事務(wù)而言,是不可見(jiàn)的。

性能

與現(xiàn)在許多多線程應(yīng)用程序廣泛使用的鎖機(jī)制不同,STM是一種非常樂(lè)觀的并發(fā)控制機(jī)制:一個(gè)線程獨(dú)立完成對(duì)共享內(nèi)存的修改,完全忽略可能會(huì)有其它的線程存在,但是線程在日志中記錄對(duì)共享內(nèi)容的每一個(gè)讀寫動(dòng)作。其他的并發(fā)控制一般是在進(jìn)行寫操作時(shí)來(lái)保證與其他事務(wù)的一致性(不能修改已經(jīng)被別的失誤修改過(guò)的共享數(shù)據(jù)),STM在完成一個(gè)事務(wù)之后,再驗(yàn)證其它線程沒(méi)有并發(fā)的對(duì)共享內(nèi)存進(jìn)行或修改,從而保證事務(wù)是完整的。因此,STM事務(wù)的最后一個(gè)操作是驗(yàn)證,如果驗(yàn)證通過(guò),則提交,否則取消,導(dǎo)致所有以前進(jìn)行的修改動(dòng)作回滾。如果一個(gè)事務(wù)不能夠提交,一般的,事務(wù)將回顧,并且從入口開(kāi)始重新執(zhí)行。

采用這種樂(lè)觀策略可以增加并發(fā)性能:任何線程無(wú)需等待一個(gè)資源,多個(gè)線程可以并行而且安全的修改同一數(shù)據(jù)結(jié)構(gòu)的多個(gè)部分(如果采用鎖,它們一般在同一個(gè)鎖的保護(hù)之下)。除了在事務(wù)失敗后需要重試而增加開(kāi)銷之外,在現(xiàn)實(shí)世界中,由于沖突是很罕見(jiàn)的,因此,實(shí)際上可以帶來(lái)性能的提升。尤其是在多處理器的情況下。

不過(guò),在一些實(shí)踐中,在較少CPU(1-4)的系統(tǒng)上,基于STM的應(yīng)用程序相對(duì)于一些精心調(diào)節(jié)的基于Lock的應(yīng)用程序而言,會(huì)有一定的性能損失。主要的原因是在STM事務(wù)中,需要維持log,以及額外的花在提交事務(wù)上的時(shí)間。不過(guò),即使在這種情況下,性能也不會(huì)低于50%。 [1]? 相對(duì)而言,STM擁護(hù)者認(rèn)為STM帶來(lái)的優(yōu)勢(shì)更為明顯。

理論上,在最糟糕的情況下,當(dāng) n 個(gè)并發(fā)事務(wù)同時(shí)運(yùn)行,他們需要 n 倍的內(nèi)存和處理器,實(shí)際的需要取決于具體的實(shí)現(xiàn)細(xì)節(jié)(比如說(shuō)一個(gè)事務(wù)可以盡早的失敗以避免后續(xù)額外的開(kāi)銷)。在某些應(yīng)用場(chǎng)景下,基于Lock機(jī)制的算法會(huì)比基于STM機(jī)制的算法更好。

STM.NET的優(yōu)點(diǎn)與缺點(diǎn)

除了性能上的優(yōu)勢(shì)之外,STM可以在概念上簡(jiǎn)化多線程應(yīng)用的模型,使得程序與一些已知的抽象概念如對(duì)象、模塊等相處更為融洽,從而變得更易為維護(hù)?;贚ock的軟件開(kāi)發(fā)在實(shí)踐上存在如下的問(wèn)題:
  
• 需要將一些相互交錯(cuò)、局部的操作理解成為一系列的獨(dú)立的、關(guān)系不密切的代碼,這對(duì)程序員而言,是一個(gè)艱巨而且很容易犯錯(cuò)的任務(wù)。
  
• 需要程序員采用一定的策略來(lái)避免死鎖、活鎖,以及其他可能的錯(cuò)誤。這些策略是強(qiáng)制的,且很容易犯錯(cuò)的,當(dāng)出現(xiàn)相關(guān)的問(wèn)題時(shí),難以重現(xiàn)、排錯(cuò)。
  
• 會(huì)導(dǎo)致優(yōu)先級(jí)沖突。經(jīng)常會(huì)出現(xiàn)一個(gè)高優(yōu)先級(jí)的線程需要等待另外一個(gè)低優(yōu)先級(jí)的線程。

相反的,STM的概念要簡(jiǎn)單得多,因?yàn)槊恳粋€(gè)事務(wù)可以理解為隔離的,就像只有單個(gè)線程進(jìn)行操作一般。死鎖等會(huì)完全避免,無(wú)需程序員擔(dān)心這個(gè)問(wèn)題。優(yōu)先級(jí)沖突的問(wèn)題仍然存在,但一個(gè)高優(yōu)先級(jí)的事務(wù)可以令得其他低優(yōu)先級(jí)的事務(wù)提前終止。

相應(yīng)的,由于需要提前結(jié)束事務(wù),也對(duì)STM的事務(wù)提出了一些限制:在事務(wù)中不能夠操作那些不能回滾的動(dòng)作,例如大部分的IO操作。這些限制在實(shí)際開(kāi)發(fā)中是通過(guò)創(chuàng)建緩沖區(qū),記錄這些不可回滾的操作,然后在事務(wù)完成后,在事務(wù)之外一次性的執(zhí)行。在Haskell語(yǔ)言中,編譯器會(huì)利用類型信息,做這個(gè)強(qiáng)制性檢查。
  STM.NET使用Atomic.Do()將一段代碼標(biāo)記為一個(gè)事務(wù):
  Atomic.Do(()=> { 
  });

STM與鎖機(jī)制一樣會(huì)導(dǎo)致系統(tǒng)性能降低,這是因?yàn)樗枰S護(hù)讀寫日志,而且提交時(shí)會(huì)花費(fèi)額外的時(shí)間。一些人認(rèn)為STM比鎖更容易使用,因此在易用性上的優(yōu)勢(shì)足以抵消性能上的降低。在一項(xiàng)名為《事務(wù)編程真的容易么?》的研究中,來(lái)自?shī)W斯丁德克薩斯大學(xué)的Christopher J. Rossbach、Owen S. Hofmann和 Emmett Witchel比較了STM與鎖的學(xué)習(xí)和開(kāi)發(fā)過(guò)程:
  
一般來(lái)說(shuō),事務(wù)內(nèi)存比簡(jiǎn)單的鎖需要更多的開(kāi)發(fā)時(shí)間,但少于細(xì)致的鎖和條件同步。
  
……我們發(fā)現(xiàn)在更復(fù)雜的情況下,簡(jiǎn)單的鎖和事務(wù)所用的時(shí)間要少于細(xì)致的鎖。這體現(xiàn)了事務(wù)的初衷,在需要多個(gè)鎖的情況下,減少編碼、調(diào)試和鎖順序的復(fù)雜性。
  
這項(xiàng)研究總結(jié)道:
  
這證明了即使新手在理解事務(wù)方面可能存在困難,但事務(wù)編程比高性能的鎖更安全。對(duì)學(xué)生的主觀評(píng)測(cè)顯示,他們認(rèn)為事務(wù)內(nèi)存比簡(jiǎn)單的鎖要難一些,但是比細(xì)致的 鎖和條件同步簡(jiǎn)單。然而在學(xué)生寫的代碼中,同步錯(cuò)誤的比率呈現(xiàn)出戲劇化的結(jié)果。對(duì)于相似的編程問(wèn)題,使用事務(wù)比使用鎖更容易得到正確的結(jié)果。
  
系統(tǒng)配置需求:Visual Studio 2008,Windows Installer 3.1以上, Internet Explorer 5.01以上。目前STM.NET只支持C#。

【編輯推薦】

  1. .NET 4.0 Beta 1新增STM特性概覽
  2. 微軟.Net 4.0實(shí)驗(yàn)版更新 預(yù)計(jì)明春發(fā)布正式版
  3. .NET 4.0 Beta 1將為PLINQ帶來(lái)生機(jī)?
  4. .NET 4.0中WCF服務(wù)配置的簡(jiǎn)化與改進(jìn)
  5. .NET 4.0內(nèi)存映射文件詳解

責(zé)任編輯:周立方 來(lái)源: IT168
相關(guān)推薦

2009-07-30 13:17:44

STM.NET.NET 4 Beta

2009-08-05 11:04:12

ASP.NET MVCSTM.NET

2009-08-31 10:08:24

VS 2010.NET 4Visual Stud

2009-08-18 09:08:08

微軟.NET擴(kuò)展

2021-04-27 09:40:43

微軟.NET Framew應(yīng)用

2021-04-27 15:35:00

Microsoft.Net Framew開(kāi)發(fā)人員

2009-07-28 09:54:23

.NET內(nèi)存管理

2019-07-02 15:21:39

緩存NET單線程

2022-06-08 17:24:13

數(shù)據(jù)庫(kù)管理工具

2011-11-11 16:14:37

LocalDB

2021-09-23 14:55:57

.NETHTTP服務(wù)器

2009-10-26 19:22:29

VB.NET使用Log

2025-01-03 08:29:53

2010-05-27 09:04:25

MEF架構(gòu).NET 4

2010-06-18 09:23:33

SortedSet.NET 4

2010-08-23 09:49:53

.NET 4

2011-05-18 10:18:10

2014-03-04 13:12:18

2009-07-23 15:49:21

mod_aspdotnApache支持ASP

2011-11-29 13:53:34

ADO.NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)