并發編程

  在過去的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

一级黄色录像影片 夫妻性生活影片 免费在线观看 一级a做爰片