关于OS层面异步编程实现的问题

发布于 2025-01-11 03:07:02 字数 342 浏览 0 评论 0原文

我不相信一些关于异步编程实现的说法。

我知道,如果一个线程请求“任何”IO 操作,例如读取文件描述符的缓冲区(stdin、stdout 等)、侦听管道、在套接字或硬盘驱动器上读写,立即将相应的线程发送到“封锁状态”。 CPU 在转入“就绪状态”之前不会处理该线程。

我的问题是,程序如何利用单个(主)线程来执行 IO 任务,而不创建分配给每个 IO 任务的多个线程。

我的第二个问题是,如果异步编程是通过多线程实现的,即使它们是轻量级的,为什么在 NodeJS 或 Javascript 等情况下它被称为单线程。

我的第三个问题是,如果异步编程是通过多线程实现的,它如何提供内存效率?

感谢您的回答。

I am not convinced about some of the claims on the implementation of async programming.

I know that if a thread requests "any" IO operations such as reading a buffer of a file descriptor(stdin, stdout, etc), listening to a pipe, reading and writing on sockets or hard drives immediately send the corresponding thread to the "blocked state". CPU doesn't handle this thread until it turned to the "ready state".

My question is, How does a program exploit a single(main) thread to do IO tasks without creating multiple threads which are assigned to each IO task.

My second question is if async programming is implemented via multiple threads even they are lightweight ones why it is called single-threaded in the cases like NodeJS or Javascript.

My third question is, if async programming is implemented via multi-threads how does it provide memory efficiency?

thanks for the answers.

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文