Node.js一千问(1):如果Node.js是单线程的,那么它如何处理并发?

主循环是单线程的,所有的异步调用都由大名鼎鼎的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设置了一个线程池来处理这种并发性。线程池中有多少线程取决于内核的数量,当然,您可以重写它。

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注