golang 关于 select,for cpu 100%

for 如果for循环体一直处于繁忙状态,则cpu被一直抢占,而cpu居高不下,如果循环体有io等待则会出让cpu,不会一直抢占 select 监听各case的io事件,各case必须都是 chan,一旦有一个case触发io则执行case块 如果没有default,则select会被一直阻塞,如果有default,则在没有io事件时,直接执行default块,退出select for select 在有default的情况下,很容易造成类似for死循环 抢占cpu的情况阅读全文

2016-01-22 11:15 wolgame
阅读:3475 评论:0

go语言坑之for range

go只提供了一种循环方式,即for循环,在使用时可以像c那样使用,也可以通过for range方式遍历容器类型如数组、切片和映射。但是在使用for range时,如果使用不当,就会出现一些问题,导致程序运行行为不如预期。比如,下面的示例程序将遍历一个切片,并将切片的值当成映射的键和值存入,切片类型是一个int型,映射的类型是键为int型,值为*int,即值是一个地址。 package main import "fmt" func main() { slice := []int{0, 1, 2, ...阅读全文

阅读:51420 评论:8

Golang调度器源码分析

原文: Golang调度器源码分析, 作者: 无心之祸 为什么Golang需要调度器? Goroutine的引入是为了方便高并发程序的编写。 一个Goroutine在进行阻塞操作(比如系统调用)时,会把当前线程中的其他Goroutine移交到其他线程中继续执行, 从而避免了整个程序的阻塞。 由于Golang引入了垃圾回收(gc),在执行gc时就要求Goroutine是停止的。通过自己实现调度器,就可以方便的实现该功能。 通过多个Goroutine来实现并发程序,既有异步IO的优势,又具有多线程、...阅读全文

阅读:1785 评论:0