摘要: 无缓冲通道 是指在接收前没有能力保存任何值得通道。这种类型的通道要求发送goroutine和接收goroutine同时准备好,才能完成发送和接收操作。如果两个goroutine没有同时准备好,通道会导致先执行发送或接收操作的goroutine阻塞等待。这种对通道进行发送和接收的交互行为本身就是同步的 阅读全文
posted @ 2018-09-16 22:10 温柔的风 阅读(3296) 评论(0) 推荐(0) 编辑
摘要: 概念及作用 channel是一个数据类型,用于实现同步,用于两个协程之间交换数据。goroutine奉行通过通信来共享内存,而不是共享内存来通信。引用类型channel是CSP模式的具体实现,用于多个goroutine通讯。其内部实现了同步,确保并发安全。 创建及使用每个channel在创建的时候必 阅读全文
posted @ 2018-09-16 17:45 温柔的风 阅读(4327) 评论(0) 推荐(0) 编辑
摘要: runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其它等待的任务运行,并在下次某个时候从该位置恢复执行。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。 runtime.Goexit( 阅读全文
posted @ 2018-09-16 14:07 温柔的风 阅读(7831) 评论(2) 推荐(0) 编辑
摘要: Go语言为并发编程而内置的上层API基于CSP(communication sequential processes,顺序通信进程)模型。这就意味着显式锁都是可以避免的,比如资源竞争,比如多个进程同时获取文件资源需要修改,首先拿到资源的进程加上锁,等修改完之后把锁去掉,然后再给下一个进程来进行修改, 阅读全文
posted @ 2018-09-16 14:07 温柔的风 阅读(1185) 评论(0) 推荐(0) 编辑