Skip to main content

golang高IO场景下的坑点

· 2 min read
Czasg

计算机程序场景可分为计算密集型和IO密集型。计算密集型,即CPU占用较高的程序,一般类似AI算法等。IO密集型则包括磁盘IO和网络IO等。
Go 的协程,天然支持并发场景,对于计算密集型和IO密集型都比较友好。但是高磁盘IO场景会有点问题,使用不当还可能造成坑点。

网络IO属于事件驱动型,可以通过注册回调实现异步化。
磁盘IO的 read/write 都是同步IO,是阻塞事件,需要同步等待。

所以,磁盘IO会造成Go的线程阻塞,而Go基于GMP模型,当M阻塞的时候,会重新创建新的M来执行G任务。
所以当类似任务足够多时,会造成Go的M暴涨,超过1w以后,会被杀掉。


👇👇👇

本文作者: Czasg
版权声明: 转载请注明出处哦~👮‍