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