摘要: 深入理解 defer 分上下两篇文章,本文为上篇,主要介绍如下内容: 为什么需要 defer; defer 语法及语义; defer 使用要点; defer 语句中的函数到底是在 return 语句之后被调用还是 return 语句之前被调用。 为什么需要 defer; defer 语法及语义; d 阅读全文
posted @ 2019-06-19 08:48 爱写程序的阿波张 阅读(5803) 评论(1) 推荐(1) 编辑
摘要: 本文主要分析为什么TIME_WAIT状态的持续时间是2MSL而不是1MSL,3MSL或其它的时长,而不会详细描述为什么需要TIME_WAIT状态。 阅读本文需要的预备知识: 了解TCP协议的状态变迁; 了解TCP拆链的四次挥手过程; 了解为什么需要TIME_WAIT状态。 了解TCP协议的状态变迁; 阅读全文
posted @ 2019-06-04 17:02 爱写程序的阿波张 阅读(2891) 评论(2) 推荐(2) 编辑
摘要: 本文是《Go语言调度器源代码情景分析》系列的第20篇,也是第五章《主动调度》的第1小节。 Goroutine的主动调度是指当前正在运行的goroutine通过直接调用runtime.Gosched()函数暂时放弃运行而发生的调度。 主动调度完全是用户代码自己控制的,我们根据代码就可以预见什么地方一定 阅读全文
posted @ 2019-05-28 16:40 爱写程序的阿波张 阅读(1472) 评论(0) 推荐(0) 编辑
摘要: 本文是《Go语言调度器源代码情景分析》系列的第19篇,也是第四章《Goroutine被动调度》的第2小节。 本文需要重点关注: 如何唤醒睡眠中的工作线程 如何创建新的工作线程 如何唤醒睡眠中的工作线程 如何创建新的工作线程 上一篇文章我们分析到了ready函数通过把需要唤醒的goroutine放入运 阅读全文
posted @ 2019-05-24 10:44 爱写程序的阿波张 阅读(1330) 评论(0) 推荐(0) 编辑
摘要: 本文是《Go语言调度器源代码情景分析》系列的第18篇,也是第四章《Goroutine被动调度》的第1小节。 前一章我们详细分析了调度器的调度策略,即调度器如何选取下一个进入运行的goroutine,但我们还不清楚什么时候以及什么情况下会发生调度,从这一章开始我们就来讨论这个问题。 总体说来,go语言 阅读全文
posted @ 2019-05-22 16:32 爱写程序的阿波张 阅读(1500) 评论(0) 推荐(0) 编辑
摘要: 序言 最近一位非常热心的网友建议结合demo来分析一下goroutine的调度器,而且还提供了一个demo代码,于是便有了本文,在此对这位网友表示衷心的感谢! 这位网友提供的demo程序可能有的gopher以前见过,已经知道了具体原因,但本文假定我们是第一次遇到这种问题,然后从零开始,通过一步一步的 阅读全文
posted @ 2019-05-20 09:08 爱写程序的阿波张 阅读(4820) 评论(2) 推荐(5) 编辑
摘要: 本文是《Go语言调度器源代码情景分析》系列的第17篇,也是第三章《Goroutine调度策略》的第2小节。 上一小节我们分析了从全局运行队列与工作线程的本地运行队列获取goroutine的过程,这一小节我们继续分析因无法从上述两个队列中拿到需要运行的goroutine而导致的从其它工作线程的本地运行 阅读全文
posted @ 2019-05-17 15:30 爱写程序的阿波张 阅读(1890) 评论(0) 推荐(1) 编辑
摘要: 本文是《Go语言调度器源代码情景分析》系列的第16篇,也是第三章《Goroutine调度策略》的第1小节。 在调度器概述一节我们提到过,所谓的goroutine调度,是指程序代码按照一定的算法在适当的时候挑选出合适的goroutine并放到CPU上去运行的过程。这句话揭示了调度系统需要解决的三大核心 阅读全文
posted @ 2019-05-15 08:37 爱写程序的阿波张 阅读(1479) 评论(0) 推荐(1) 编辑
摘要: 本文是《Go语言调度器源代码情景分析》系列的第15篇,也是第二章的第5小节。 上一节我们说过main goroutine退出时会直接执行exit系统调用退出整个进程,而非main goroutine退出时则会进入goexit函数完成最后的清理工作,本小节我们首先就来验证一下非main gorouti 阅读全文
posted @ 2019-05-13 15:23 爱写程序的阿波张 阅读(1823) 评论(1) 推荐(0) 编辑
摘要: 本文是《Go语言调度器源代码情景分析》系列的第14篇,也是第二章的第4小节。 上一节我们通过分析main goroutine的创建详细讨论了goroutine的创建及初始化流程,这一节我们接着来分析调度器如何把main goroutine调度到CPU上去运行。本节需要重点关注的问题有: 如何保存g0 阅读全文
posted @ 2019-05-09 15:29 爱写程序的阿波张 阅读(2322) 评论(0) 推荐(0) 编辑