@JunQiu
2019-11-21T16:07:27.000000Z
字数 637
阅读 2117
node.js是单线程,还需要redis、mysql的连接池的多连接??
language_node
summary_2019/01
1、问题
- node.js是单线程,使用连接池建立多个连接有效果??
2、结论
- 先抛出结论:当然是可以的,虽然程序是在单线程上运行,但是有
Libuv
为node.js提供线程池,当需要I/O请求时,我们会将 I/O 操作的请求传达给 Libuv 之后,Libuv 开启线程来执行这次 I/O 调用,并在执行完成后,传回给 node.js 进行后续处理。
3、redis的连接池
- redis是单线程的,即使异步使用多个连接去请求redis,redis也会按先后顺序依次处理,并依此返回。但并不意味着连接池并没有作用,连接池还有很大的一个优点是避免重复建立连接,实现连接复用,建立连接的开销是很大的。
- 使用连接池还有一个好处,当由于某种原因我们的连接断开了,是否意味着我们需要重启程序,建立连接呢??当然不会,redis客户端会重新建立连接,但需要一段时间,在这段时间内服务器是不可正常使用的,但使用连接池会会更快重建连接。
4、mysql的连接池
- mysql会为每个连接创建一个单独的线程来查询,因此我们可以通过使用多个连接来提高查询效率。如上文所言,当node.js使用多个连接查询mysql时,其实是通过Libuv开启线程来执行I/O请求。
5、参考