<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 內存鎖與內存事務 - 劉小兵2014 內存鎖是語言的失敗。 DBMS使用事務封裝了鎖。內存事務卻在微軟那里不了了之。原因竟然是沒有發現對它的殺手級應用。 什么是殺手級應用? 現在的語言中,幾乎全部都存在著各式不同的封鎖元素。包括語言級的與庫級的。特別是那些所謂面向對象的語言。原因一方面是面向對象的程序中存在大量的數據共享,另一方面則是現代計算機的快速發展導致的多線程并發模式的大量應用(或者說“普及”)。 在JDon中發現幾篇文章說數據庫已死。我完全同意這種觀點。但是我們不能讓數據庫就這么死去,因為它發展了那么多年,有很多值得借鑒的東西很值得保存下來或者說特性移植。面向對象的系統在內存中沒錯,但在內存中的對象與位于數據庫中的對象并沒有本質的區別,它們都是數據。所以在DBMS中對數據進行管理的一整套東西其實都可以照原樣搬過來。 微軟之所以沒在內存事務中發現殺手級應用,很可能是因為他們自己的程序很多都是面向過程的,這樣的話當然很難發現殺手級應用了。 事務的價值在于它從輸出的角度對鎖機制進行了封裝,避免了在應用開發中很難處理或管理的死鎖,粒度控制等東西。因為這些東西直接影響運行時,本來就是應該被從,至少從用戶代碼的層次拿掉的。用戶怎么能直接“指揮”運行時呢?用戶對運行時的直接“干預”,很多時候是造成系統崩潰的原因。內存指針就是一個例子。不過值得慶幸的是,它已經在JAVA中拿掉(為什么不在當時一起拿掉同步呢?有困難嗎?)。 關于并發控制,我認為程序員的唯一職責應該是“定義事務”,不是更多。任何更多的職責都違背了程序語義學的觀點:語言是為我服務的。而關于并發則**只有“事務”才是在這種服務協議中應該出現的東西。** 回到現實。 對應四種ACID問題:更新失敗,臟讀,不可重復讀,幻影讀,有四種事務隔離級別:Read uncommitted, Read committed, Repeatable Read, Serializable。四種隔離級別分別采用四種封鎖(協議)實現:X鎖,X鎖+單次S鎖,X鎖+事務級S鎖,范圍鎖。 鎖有更復雜的實現如更新鎖,意向鎖,樂觀鎖,悲觀鎖,輕量級鎖,偏向鎖,自旋鎖等等,都是針對不同的需求特征或事務等級定制的鎖。事實上,這里面的很多只是使用了鎖的名字,所以其實并不是鎖,因為它們沒有起到排它的作用如自旋鎖,輕量級鎖,偏向鎖等等其實都不是鎖。特別是樂觀鎖,卻是通過不鎖來達到鎖的效果。 另一方面,根據被封鎖的對象的大小,又可以被分為行鎖,表鎖,頁鎖,或其它范圍鎖,特別是對于內存數據,根據內存數據的結構與層次,鎖的種類其實無限多。但是在真正的開發工作中只要找到合適粒度的對象就可以了,不必過于較真。 對應于以數據庫為中心的系統和以內存為中心的系統,鎖又可以分為內存鎖與數據庫鎖。數據庫鎖在大部分時候并不會被程序員直接使用因為上面包了一層事務。而在以內存為中心的系統中,java 1.5以后就提供了很多的封鎖類與原子操作可以被利用。特別是在1.6以后的鎖優化,基本上排除了在發現真正的沖突以前的封鎖開銷。這些鎖機制與API,加上原來就存在的語言級元素如synchronized和volatile,是采用真正的面向對象編程時必不可少的一部分。 這意味著如果要在項目中啟用OO的范式進行系統開發,則對程序員的要求其實非常高。因為對上面所述這些鎖機制的深刻理解,不是一個初入者可以很容易搞明白的東西。大部分的程序員都必須在碰了很多釘子以后才可能真正學會一些東西。 這里當然也有語言級的問題。如一些程序語義派的研究者的認為那樣,語言的元素應該指代的是語言的執行結果,而不是運行時特性。將語言元素指向運行時特性產生很多問題,第一就是造成程序對運行時的依賴,因為程序顯然依賴于語言的具體語義。事實上,程序的語義承載能力即來自于語言的語義承載能力。俗語水能載舟亦能覆舟是一樣的道理。另一個問題則是程序語義的丟失。將一個語言元素的語義指向運行時的后果是,它沒有被指向“運行后”的結果。在運行時中給語法元素賦值(即賦予語法元素一定的語義)是一種推脫責任的行為。這就好象指著未完工的產品對客戶說:這就是你要的東西! 我其實認為程序員的知識重點是應該擺在建模上面。但是世界并不完美,我們卻要工作。這就要求我們不得不擁有一些應付這個不完美世界的能力。換一句話,如果世界已經是完美的,為什么我們還需要工作呢?我們還要繼續努力,因為世界還不完美(這個有點象悖論,,,因為它看上去好象是我們工作的目的是為了讓世界更完美,但是事實卻是世界從沒有變得“更”完美或永遠也不可能完美。。。歸根結底,我們并不是世界。我們也不存在。真正存在的從頭到尾只不過是一些雄激素而已。我們以為我們存在,只不過雄激素讓我們以為我們存在然后我們便可以成為我們)。 http://www.jdon.com/oo.html, uml ? 著作權歸作者所有 分類:Stock 字數:1688 ### 轉自 [內存鎖與內存事務 - 劉小兵2014](https://my.oschina.net/digerl/blog/34001#tt_daymode=1) last update:2017-6-29 21:00:28
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看