node.js是否在内部使用线程/线程池?

 手机用户2502905147 发布于 2023-02-13 11:57

我决定熟悉node.js并阅读了几篇关于这个主题的文章.我还不清楚的是,当您调用node.js函数时,node.js是否在线程池中创建新线程和/或调度线程池上的任务.

例如,如果我调用fs.readFile它是在另一个线程上执行的?

如果是,[how]我可以编写自己的函数readFileCustomized还是doLongOperation在不同的线程上运行?

1 个回答
  • 文件操作没有异步API,因此node.js使用线程池.你可以在libuv的代码中看到它.

    该池可以运行4个线程:

    static uv_thread_t default_threads[4];
    

    使用uv__work_submit发布阻止FS任务.例如,以下是如何实现读取:

    int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
                   uv_file file,
                   void* buf,
                   size_t len,
                   int64_t off,
                   uv_fs_cb cb) {
      INIT(READ);
      req->file = file;
      req->buf = buf;
      req->len = len;
      req->off = off;
      POST;
    }
    
    ...
    
    #define POST                                                                  \
      do {                                                                        \
        if ((cb) != NULL) {                                                       \
          uv__work_submit((loop), &(req)->work_req, uv__fs_work, uv__fs_done);    \
          return 0;                                                               \
        }                                                                         \
        else {                                                                    \
          uv__fs_work(&(req)->work_req);                                          \
          uv__fs_done(&(req)->work_req, 0);                                       \
          return (req)->result;                                                   \
        }                                                                         \
      }                                                                           \
      while (0)
    

    如果你想实现自己的线程,你可以查看这个很棒的介绍.

    2023-02-13 11:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有