And*_*ykh 5 multithreading node.js
我决定熟悉node.js并阅读了几篇关于这个主题的文章.我还不清楚的是,当您调用node.js函数时,node.js是否在线程池中创建新线程和/或调度线程池上的任务.
例如,如果我调用fs.readFile它是在另一个线程上执行的?
如果是,[how]我可以编写自己的函数readFileCustomized还是doLongOperation在不同的线程上运行?
文件操作没有异步API,因此node.js使用线程池.你可以在libuv的代码中看到它.
static uv_thread_t default_threads[4];
Run Code Online (Sandbox Code Playgroud)
使用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)
Run Code Online (Sandbox Code Playgroud)
如果你想实现自己的线程,你可以查看这个很棒的介绍.
| 归档时间: |
|
| 查看次数: |
3571 次 |
| 最近记录: |