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

相关文章
相关标签/搜索