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

标签 asynchronous go

我研究了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/

相关文章:

google-app-engine - 从 Golang AppEngine 快速轻松地发布到 Slack Webhook

go - 向贡献者指定在 go 项目中使用的 go 版本

c# - 如何在异步多线程爬虫中锁定回调类?

python - 无法在异步调用的函数中放入 Python 调试器?

node.js - 如何知道何时完成

go - Go中特定接口(interface)的 slice

javascript - 将 Javascript 变量的值发送到 Go 变量中

c# - Controller 操作中的异步等待 : Error: Can not await 'void'

javascript - 如何从异步调用返回响应?

json - Golang 将 JSON 映射到结构体