摘要: 前置知识点: go程序中,任何对系统 API 的调用,都会被 runtime 层拦截来方便调度。 go一共有4种阻塞的情况,并且这些阻塞都是可以被runtime检测到的,runtime检测到阻塞时就可以进行优化处理。 1. blocking syscall (for example opening 阅读全文
posted @ 2020-03-05 19:28 sicnu-yudidi 阅读(2279) 评论(0) 推荐(0)
摘要: 先看这个 "谈谈调度 Linux O(1)" linux scheduler的主要操作: search+insert 1. 查找要执行的任务(search) 2. 任务执行完时间片后放回或删除(insert/delete) 3. 切换上下文 // 这个最多只有CPU核数那么多个线程需要切换,所以本身 阅读全文
posted @ 2020-03-05 18:14 sicnu-yudidi 阅读(273) 评论(0) 推荐(0)
摘要: 从Go 1.0 到 Go 1.1,作者有篇设计文档 "Scalable Go Scheduler Design Doc" 。 我一直觉得奇怪,为什么要说是Scalable呢。 后来在go夜读的一次讨论中,了解到linux2.4 linux2.6的调度器优化过程也类似的原因和过程。 Go 1.0和li 阅读全文
posted @ 2020-03-05 15:07 sicnu-yudidi 阅读(278) 评论(0) 推荐(0)
摘要: 现状(What) 基于同一个task_struct结构体,这个结构体既能代表进程也能代表线程,同时这个结构体也是内核调度的最小单位。 这个结构体有2个字段,pid字段用于唯一标识一个task_struct(用于内核调度), tgid字段标记一组task_struct, tg是thread group 阅读全文
posted @ 2020-03-05 00:54 sicnu-yudidi 阅读(552) 评论(0) 推荐(0)