主循环是单线程的,所有的异步调用都由大名鼎鼎的Libuv库管理。
Libuv是⼀个⾼性能的,事件驱动的异步I/O库,它本身是由C语⾔编写的,具有很⾼的可移植性。
const crypto = require("crypto");
const startTime = Date.now();
const test = () => {
crypto.pbkdf2("a", "b", 100000, 512, "sha512", () => {
console.log("Interval:", Date.now() - startTime);
});
};
test(); // Interval:1213
test(); // Interval:1225
test(); // Interval:1212这是因为Libuv设置了一个线程池来处理这种并发性。线程池中有多少线程取决于内核的数量,当然,您可以重写它。