84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
这个提供异步I/O的库,在nodejs中扮演了什么角色? 在其他语言中异步I/O是如何实现的?
欢迎选择我的课程,让我们一起见证您的进步~~
libuv 是 nodejs 的副产品。最开始 nodejs 用 libev 监听各种异步事件,后来因为它无法支持 Windows 才不得不自己写了个 libuv,加入了 Windows 支持。当然 libuv 后来也加入了很多 libev 没有的功能,慢慢发展成现在这样。
异步 IO(准确来讲应该是异步 event),在各个语言里封装各不相同,但是原理应该是大同小异的。
最流行的是使用异步 I/O 结合各种轮询函数(select/poll/epoll/kqueue/IOCP)来实现事件轮询,确保在事件发生的时候才唤醒等待的线程,把事件交给指定的处理函数或者某个工作线程来处理。python 的 asyncore 就是干这个事情的。
比较土的是用不同进程/线程以阻塞方式使用 IO,反正一个进程/线程阻塞了还可以用其他的进程/线程继续处理新请求,只要有一个地方能缓存所有请求保证不丢失就行。这种虽然本质上不是异步 I/O,但使用起来也挺“异步”的,像 PHP 就属于这种。
我来补充一下一楼的回答,c语言(linux下)中使用select/poll/epoll等技术来实现异步IO,其他语言(java\python)等,在底层对C语言的调用做了封装,然后就是你看到的API的样子。
libuv 是 nodejs 的副产品。最开始 nodejs 用 libev 监听各种异步事件,后来因为它无法支持 Windows 才不得不自己写了个 libuv,加入了 Windows 支持。当然 libuv 后来也加入了很多 libev 没有的功能,慢慢发展成现在这样。
异步 IO(准确来讲应该是异步 event),在各个语言里封装各不相同,但是原理应该是大同小异的。
最流行的是使用异步 I/O 结合各种轮询函数(select/poll/epoll/kqueue/IOCP)来实现事件轮询,确保在事件发生的时候才唤醒等待的线程,把事件交给指定的处理函数或者某个工作线程来处理。python 的 asyncore 就是干这个事情的。
比较土的是用不同进程/线程以阻塞方式使用 IO,反正一个进程/线程阻塞了还可以用其他的进程/线程继续处理新请求,只要有一个地方能缓存所有请求保证不丢失就行。这种虽然本质上不是异步 I/O,但使用起来也挺“异步”的,像 PHP 就属于这种。
我来补充一下一楼的回答,c语言(linux下)中使用select/poll/epoll等技术来实现异步IO,其他语言(java\python)等,在底层对C语言的调用做了封装,然后就是你看到的API的样子。