线程池异步查询¶
实现¶
客户端
- 线程池:可以异步
- 连接池:客户端与服务端通信使用TCP协议;可以避免大量连接建立和销毁的开销;避免大量请求
服务端
IO多路复用:线程池中group的监听线程使用epoll;epoll监听group内所有连接的套接字,然后将监听到的连接
请求push到队列,group中的worker线程从队列中获取任务并执行
线程池:线程处理的最小单位是
statement,一个线程可以处理多个连接的请求;避免大量线程
IO多路复用¶
当处理的消耗对比IO几乎可以忽略不计时,可以处理大量的并发IO,而不用消耗太多CPU/内存。适合处理很多闲置的IO。
线程池¶
如果做不到处理过程相对于IO可以忽略不计,IO多路复用不一定比线程池方案更好(数据库查询的时间长)。
使用连接池原因¶
- JDBC是BIO,并发查询必须使用多个连接
- 数据库使用连接作为Session管理的基本单元,同一个Session的操作是串行的。且连接越多,维护查询正确性消耗的资源越多。所以不使用多路复用