Kotlin协程如何利用IO线程

3

我需要了解的是,如果一个系统只有一个IO线程,在多个协程上运行多个IO操作时,这些协程是否可以以挂起的方式使用同一个线程(也就是说,当协程A正在等待IO结果时,协程B可以利用该线程进行其IO操作),还是该线程会被第一个IO操作阻塞?

1个回答

5

这取决于你正在执行什么类型的IO操作。如果你正在执行 异步 IO 操作,那么这个IO操作不会阻塞线程,让其他协程可以使用它。如果你正在执行 阻塞 IO 操作,那么它会阻塞线程,其他协程无法使用它。


所以如果我理解正确的话,如果我从协程内部调用一个普通的阻塞函数,这个调用将会阻塞协程所在的线程,但如果我将同样的阻塞函数更改为挂起函数,那么这个协程将被挂起,线程就可以执行其他任务了。对吗? - rahil008
1
请注意,仅声明一个名为suspend的函数是没有任何区别的。您需要切换到另一个支持进行异步请求的IO库。 - Marko Topolnik
注意仅仅声明一个函数是suspend并不会有任何区别。同意,感谢明确提到它。 - rahil008
顺便说一下,在我的第一条评论中,我打算使用withContext{}或async{}等。 - rahil008

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接