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

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

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

如果是的话,我怎么能写我自己的函数readFileCustomizeddoLongOperation运行在不同的线程?

没有用于文件操作的asynchronousAPI,所以node.js为此使用了一个线程池。 你可以在libuv的代码中看到它。

池可以运行4个线程 :

 static uv_thread_t default_threads[4]; 

阻止FS任务与uv__work_submit一起发布。 例如,以下是如何实现读取 :

 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) 

如果你想实现自己的线程,你可以检查这个伟大的介绍 。