goroutine与调度器

我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一个调度器来维护这些goroutine,确保所有的goroutine都使用cpu,并且是尽可能公平的使用cpu资源。 这个调度器的原理以及实现值得我们去深入研究一下。支撑整个调度器的主要有4个重要结构,分别是M、G、P、Sched,...阅读全文

阅读:13220 评论:5

Golang 中的并发限制与超时控制

前言 上回在 用 Go 写一个轻量级的 ssh 批量操作工具 里提及过,我们做 Golang 并发的时候要对并发进行限制,对 goroutine 的执行要有超时控制。那会没有细说,这里展开讨论一下。 以下示例代码全部可以直接在 The Go Playground 上运行测试: 并发 我们先来跑一个简单的并发看看 package main import ( "fmt" "time" ) func run(task_id, sleeptime int, ch chan string) { time....阅读全文

2018-02-09 10:33:05 小冯冯
阅读:1352 评论:0

剖析与优化 Go 的 web 应用

Go 语言有一个很强大的内置分析器(profiler),支持CPU、内存、协程 与 阻塞/抢占(block/contention)的分析。 ## 开启分析器(profiler) Go 提供了一个低级的分析 API [runtime/pprof](https://golang.org/pkg/runtime/pprof/) ,但如果你在开发一个长期运行的服务,使用更高级的 [net/http/pprof](https://golang.org/pkg/net/http/pprof/) ...阅读全文

2018-03-25 22:32:08 lightfish-zhang
阅读:2683 评论:1

90后“老头儿”和00后Go小子的硬盘夜话

来自:码农翻身(微信号:coderising)作者:刘欣1初次见面虽然这个目录中各种编程语言写的程序层出不穷,但Java还是怀念不幸罹难的C老头儿。他经常给同一目录中的Python ,Ruby说C老头儿知识多么渊博,贴近硬件运行,速度飞快,能从他身上学到很多东西等等。(注:参加《C老头儿和Java小子的硬盘夜话》)今天目录里入驻了一个新家伙,Java一看文件名"hello.go"就知道这是一门新的语言,难道这们语言叫做Go吗? 用一个动词作为语言名称,挺少见的啊!Java赶紧上网搜索,我赛,这个...阅读全文

2017年12月16日 00:00:00 UzV80PX5V412NE
阅读:2799 评论:3