据我所知,nodejs 不是单线程的。在后台,一个工作线程池正在循环执行epoll等无法完成的长io任务。但是后台有多少线程?我找不到任何文件来 grep 号码。
如果我想让nodejs配合mysql数据库,应该有几个线程来执行长期查询任务。而且如果nodejs提供的线程很少,有的sql查询会阻塞是非常危险的。所以我应该非常小心 mysql 模型定义和 sql 查询性能,而这确实是某种专门的工作。
据我所知,nodejs 不是单线程的。在后台,一个工作线程池正在循环执行epoll等无法完成的长io任务。但是后台有多少线程?我找不到任何文件来 grep 号码。
如果我想让nodejs配合mysql数据库,应该有几个线程来执行长期查询任务。而且如果nodejs提供的线程很少,有的sql查询会阻塞是非常危险的。所以我应该非常小心 mysql 模型定义和 sql 查询性能,而这确实是某种专门的工作。
最近在研究node-mysql,node-mysql是完全基于事件的,使用node的eventloop,完全不用担心性能问题。
和 node-postgres 是一样的。
但是后台有一个线程池。
我研究了 libeio 源代码,发现旧版本的节点中有 4 个线程。
我研究了 libuv 源代码,发现该数字可以通过 process.env.UV_THREADPOOL_SIZE=number_you_need 在最新版本的节点中进行配置。
你误会了。node.js 是单线程的。
大多数用于 node.js 的优秀 MySQL 驱动程序都是异步的,因此它们在等待查询完成时不会阻塞进程。