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

发布于 2022-08-30 01:18:46 字数 174 浏览 29 评论 0

这个提供异步I/O的库,在nodejs中扮演了什么角色?
在其他语言中异步I/O是如何实现的?

banner.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夕嗳→ 2022-09-06 01:18:46

libuv 是 nodejs 的副产品。最开始 nodejs 用 libev 监听各种异步事件,后来因为它无法支持 Windows 才不得不自己写了个 libuv,加入了 Windows 支持。当然 libuv 后来也加入了很多 libev 没有的功能,慢慢发展成现在这样。

异步 IO(准确来讲应该是异步 event),在各个语言里封装各不相同,但是原理应该是大同小异的。

最流行的是使用异步 I/O 结合各种轮询函数(select/poll/epoll/kqueue/IOCP)来实现事件轮询,确保在事件发生的时候才唤醒等待的线程,把事件交给指定的处理函数或者某个工作线程来处理。python 的 asyncore 就是干这个事情的。

比较土的是用不同进程/线程以阻塞方式使用 IO,反正一个进程/线程阻塞了还可以用其他的进程/线程继续处理新请求,只要有一个地方能缓存所有请求保证不丢失就行。这种虽然本质上不是异步 I/O,但使用起来也挺“异步”的,像 PHP 就属于这种。

万水千山粽是情ミ 2022-09-06 01:18:46

我来补充一下一楼的回答,c语言(linux下)中使用select/poll/epoll等技术来实现异步IO,其他语言(java\python)等,在底层对C语言的调用做了封装,然后就是你看到的API的样子。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文