<mark id="5z1b5"><cite id="5z1b5"></cite></mark>

        <video id="5z1b5"></video>
          <noframes id="5z1b5"><ins id="5z1b5"></ins>

            <em id="5z1b5"></em>

            <dl id="5z1b5"><ins id="5z1b5"></ins></dl>

              并發編程

                在過去的30年里,計算機的性能是在摩爾定律的推動下,從現在開始,這將由Amdahl定律決定。編寫代碼,有效地利用多個處理器可以是非常具有挑戰性的。" -Doron Rajwan  

              Amdahl's Law每個程序都分為串行與并行部分,降低串行的比重,可提高程序的效率。

               

                進行多核多服務器時代,并行并發模式更是對程序員的挑戰,現在所謂的Thread Programmer世界上也是為數不多,因為線程表面上好像很容易,但在實際應用中真正應付大負荷運算時,原來的線程設計方案漏洞百出。

                 并發concurrency屬于問題域(problem domain), 并行parallelism屬于( solution domain)。并行和并發的區別在于有無狀態,并行計算適合無狀態應用,而并發解決的是有狀態的高性能; 有狀態要著力解決并發計算,無狀態要著力并行計算,云計算要能做到這兩種計算自動伸縮擴展。

                并發主要是要解決資源爭奪,并發一般發生在數據聚合的地方,只要有聚合,就有爭奪發生,傳統解決爭奪的方式采取線程鎖機制,這是強行對CPU管理線程人為干預,線程喚醒成本高,新的無鎖并發策略來源于Java的NIO或Node.js,通過隊列+單線程操作資源的方式巧妙避免了多線程,由于只有一個線程,在多核情況下增加了并行計算的機會。

                并發模型分兩種,并發基礎線程和并發組件模型,并發組件模型讓使用者接觸不到基礎線程概念,是一種簡化。作為一個高級集成架構師,應該在程序范式的高級層次定義并發,基于組件級別的并發,并且盡可能地避免涉及線程概念以及線程池等底層概念。

                實現并發的途徑有兩種,基于線程和基于事件,基于線程與基于事件的并發編程之爭

               

              數據庫

              什么是數據庫ACID

              業界最大謊言:大部分關系數據庫并不真的支持ACID

              Java持久鎖總結

              數據庫系統并發控制原理

              PostgreSQL、Oracle/MySQL和SQL Server的MVCC實現原理方式

              最終一致性其實比MVCC簡單

              線性化與串行化比較

              ACID和CAP的詳盡比較

              更多事務專題

              替代傳統事務的并發建議

               

              多線程并發

              多線程常見面試題

              Java多線程設計編程

              Java多線程并發最佳實踐

              Java Collection集合面試題

              什么使得并行編程變得很難?

              多線程讓可擴展性走進了死胡同

              JVM內存模型和性能優化

              jvm是如何處理鎖的?

              Java三種常見鎖性能對比

              可擴展的并發架構

              并發應用中不可變數據結構

              Java硬件事務內存

              Doug Lea談JDK7的Fork/Join框架

              線程池與ForkJoin比較

              使用future實現內置異步API

              不可變真的意味線程安全?

              不變性immutablity設計 

              無堵塞的并發編程 

              actor并發模型&基于共享內存線程模型

              使用Java8的Lambda簡化ReadWriteLock

              Java 8 LongAdders

              Java 8的StampedLocks

              Java: CyclicBarrier解釋

              有關Java其他多線程方面文章。點按進入

              ExecutorService - 10個技巧和竅門

              Java8的CompletableFuture

              多線程并發編程中的初始化問題

               

              并發教程與源碼

              死鎖詳解研究

              隱藏的線程死鎖

              單獨寫原則

              semaphore使用案例源碼

              JPA/Hibernate:基于版本的樂觀鎖并發控制

              數據庫死鎖問題

              什么是數據庫ACID?

              針對多核可擴展的計數器源碼下載

              簡單輕量池Pool實現源碼下載

              使用Guava Striped類實現高并發源碼

              什么時候使用Reentrant鎖

              非堵塞異步Java 8 和 Scala的Try/Success/Failure

              使用Executors 和 ThreadPoolExecutor實現Java線程池案例

              使用Guava為并發應用實現基于對象的微鎖

              Hazelcast入門教程

              Java并發隨機數的產生

              Java8流和forkjoin并行計算

               

              Disruptor

              Disruptor專題

              LMAX架構

              如何讓Java以光的速度跨線程通信?

               

              NIO

              Reactor模式和NIO

              Java NIO原理和使用

              Netty原理和使用

              用Java NIO開發高性能聊天系統

              Vert.x編程

               

              Reactive與Actors

              事件驅動編程

              go reactive宣言

              Rx (Reactive Extensions)介紹

              RxJava教程

              RxJava專題

              AKKA框架

              Actors模型

              Reactive編程專題

               

               

              Goroutine與Channel

              Actor模型和CSP模型的區別

              Go語言Goroutine與Channel內存模型

              Go語言是徹底的面向組合的并發語言

              Go 1.5的并發特性與案例(事件與轉賬)

              Go語言專題

               

              Rust語言并發模型

              參考相關:

              并行計算

              并發策略可以解決延遲

              領域事件和EventSourcing

              并發討論專題

              異步編程模型

              性能主題

              高性能

              性能調優

              性能測試

              EDA

              美女漫画大全