首页 > libuv 和 nodejs 的关系是什么?其他语言(如:python)是如何实现异步I/O的?

libuv 和 nodejs 的关系是什么?其他语言(如:python)是如何实现异步I/O的?

这个提供异步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的样子。

【热门文章】
【热门文章】