MyBatis常见面试题5:Java客户端中的一个Connection问题
说明:本考题来源于群内成员的讨论,有启发意义,特此编写成文发出来,有助于大家加深对数据库底层的理解。
问题:Java客户端中的一个Connection是不是在MySQL中就对应一个线程来处理这个链接呢?
答案:不是。凡是从线程思考问题的人,一般都是被Java技术的多线程思想所禁锢了,其实在高性能服务器端端开发底层往往靠io复用来处理,这种模式就是:单线程+事件处理机制。在MySQL里面往往有一个主线程,这是单线程(与Java中处处强调多线程的思想有点不同哦),它不断的循环查看是否有socket是否有读写事件,如果有读写事件,再从线程池里面找个工作线程处理这个socket的读写事件,完事之后工作线程会回到线程池。所以:Java客户端中的一个Connection不是在MySQL中就对应一个线程来处理这个链接,而是由监听socket的主线程+线程池里面固定数目的工作线程来处理的。