我在linux中学习golang调度程序。我认为golang使用多线程来实现goroutine,当一些goroutine在I / O中被阻塞时(就像读取文件一样),其他线程继续处理另一个goroutine。但是当有很多I / O时,我认为线程不够,golang如何应对呢?
我读了一篇文章http://morsmachine.dk/netpoller,它说“Go通过使用操作系统提供的异步接口解决了这个问题,但阻止了执行I / O的goroutine。” 它是否像aio_read?据说异步接口存在很多错误。我在源代码中找不到它,或者我只是想念它。
据我们所知,我知道我们可以使用epoll为管道和套接字执行异步io,但是epoll不能用于读取或写入常规文件。 nodejs使用libeio为常规文件执行此操作。我想知道golang在运行时是如何做到的。
答案 0 :(得分:2)
Go还没有对文件I / O使用任何特殊功能。它只是创建一个新线程(以便goroutines总有GOMAXPROCS线程可用)并阻止操作。我认为已经有一些关于在邮件列表中使用AIO的讨论,但当时有很多问题。对于这类问题,golang-nuts mailing list可能是一个更好的地方。