nodejs多线程锁

一个完整的 node.js事件循环流程
node.js事件循环
Client 请求到达 node api,该请求被添加到Event Queue(事件队列)。这是因为Node.js 无法同时处理多个请求。
Event Loop(事件循环) 始终检查 Event Queue 中是否有待处理事件,如果有就从 Event Queue 中从前到后依次取出,然后提供服务。
Event Loop 是单线程非阻塞I/O,它会把请求发送给 C++ Thread Pool(线程池)去处理,底层是基于C++ Libuv 异步I/O模型结构可以支持高并发。
现在 C++ Thread Pool有大量的请求,如数据库请求,文件请求等。
任何线程完成任务时,Callback(回调函数)就会被触发,并将响应发送给 Event Loop。
最终 Event Loop 会将请求返回给 Client。

node js实现多线程锁

// 线程锁
let isLock = false;
let lockList = [];
async function lock() {
  function unlock() {
    let waitFunc = lockList.shift();
    if (waitFunc) {
      waitFunc.resolve(unlock);
    } else {
      isLock = false;
  if (isLock) {
    return new Promise((resolve, reject) => {
      lockList.push({ resolve, reject });
  } else {
    isLock = true;
    return unlock;