gpt4 book ai didi

asynchronous - go中如何实现异步读取?

转载 作者:IT王子 更新时间:2023-10-29 02:05:58 25 4
gpt4 key购买 nike

我研究了linux下的golang调度器。我认为 golang 使用多线程来实现 goroutine ,当某个 goroutine 在 I/O 中被阻塞时(就像读取文件一样),其他线程继续处理另一个 goroutine 。但是当I/O很多的时候,我觉得thread不够用,golang是怎么处理的?

我读了一篇文章 http://morsmachine.dk/netpoller ,它说“Go 通过使用操作系统提供的异步接口(interface)来解决这个问题,但阻止正在执行 I/O 的 goroutines。” .它像 aio_read 吗?据说异步接口(interface)有很多错误。而且我没有在源代码中找到它,或者我只是想念它。

据我所知,我知道我们可以使用 epoll 对管道和套接字进行异步 io,但是 epoll 不能用于读取或写入常规文件。 nodejs 使用 libeio 对常规文件执行此操作。我想知道 golang 在运行时是怎么做的。

最佳答案

Go 还没有对文件 I/O 使用任何特殊的东西。它只是创建一个新线程(以便始终有 GOMAXPROCS 线程可用于 goroutines)并阻塞操作。我认为在邮件列表中已经有一些关于使用 AIO 的讨论,但当时存在很多问题。 golang-nuts mailing list可能是解决这类问题的更好地方。

关于asynchronous - go中如何实现异步读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com