摘要:
前置知识点: 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)

浙公网安备 33010602011771号