NIO與JDBC的再思考:同步與阻塞在論域上的根本區別

JDBC中STATEMENT的執行是同步的。可是非阻塞的。即,不一樣的STATEMENT間並不會互相阻塞。這一點與NIO是類似的。數據庫

同步的論域是縱向的。它表達的是模塊間的協做模型。併發

阻塞的論域是橫向的。它表達的是線程間的協做模型。維基上的解釋也是這樣的:http://en.wikipedia.org/wiki/Non-blocking_algorithm:app

...The traditional approach to multi-threaded programming is to use locks to synchronize access to shared resources...spa

二者的語義都是動態的。模塊協做與線程協做都是運行時語義。分別用來描述程序或系統內的縱向與橫向協做。模塊協做確定是分時間進行的。而線程協做卻有多是或至少能夠當作是同時進行的。線程

若是JDBC CONNECTION類的的全部STATEMENT操做都是非阻塞的,那麼意味着同一個鏈接的STATEMENTS能夠同時進行它們的動做。這樣的話,就沒有必要必定要用多個鏈接去鏈接同一個數據庫。事務

若是用一個鏈接就能夠達到同時即併發與數據庫通訊的目的,那我爲何要用鏈接池呢?特別是在並不存在任何事務性需求的環境下?ip

相關文章
相關標籤/搜索