Golang netpoller的原理早在很久以前研究过一次,当时写过一篇文章,最近部门正好有一次技术分享的名额,于是把这块知识就重温了一遍,做了一次关于netpoll的分享,也算是炒冷饭了,下面是分享的ppt内容。
Golang网络库调用栈
思考问题:当没有客户端请求时候函数会阻塞在Accept上面,此时的阻塞是发生了进程切换,让出CPU了吗?当客户端已经建立连接,但是没有发送数据时候,也会阻塞在Read上面,此时的阻塞又是怎么处理的?
线程之间的切换要进入内核态执行系统调用,而协程的切换是在用户态完成,相对来说更加节省资源
源码调用栈,红色部分代表内核态,黄色部分代表runtime部分代码。
从net.Listen进入
当没有客户端请求时候,accept函数会阻塞住(亮黄色部分代表代码切换到了G0调度栈)
从总体来看还是比较枯燥的,因为主要还是一些理论知识和源码调用流程。感兴趣的小伙伴可以和一些netpoller相关的文章以及源码一起对比食用,现在相关的好文章还是挺多的,相信你定能理解这块知识点。