libuv 和 nodejs 的关系是什么?其他语言(如:python)是如何实现异步I/O的?
这个提供异步I/O的库,在nodejs中扮演了什么角色?
在其他语言中异步I/O是如何实现的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
这个提供异步I/O的库,在nodejs中扮演了什么角色?
在其他语言中异步I/O是如何实现的?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
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的样子。