浅谈协程,线程
线程
线程是基本执行单位,线程是需要被分配系统资源的,是需要系统来调度的,有上下文切换耗时,IO 操作,网络请求等待。。。
它可以运行于 CPU 的多核,适合『并行』 处理任务。注意是并行,不是并发,举个通俗的例子,周伯通的左右互搏,左手画方,右手画圆,互不干扰。
并发,比如你一边看书,一边记笔记,偶尔停下来喝口水,这就属于并发。所以为什么线程的并发还是性能不高,正是因为有很多等待过程,CPU切换等待,网络等待,IO等待。
协程
协程也可以看作是一种线程,不过它更轻量化,所以常常说为『轻量级线程』。
协程是不需要系统调度的,由编程语言自身完成,也就大大降低了系统资源开销,它属于『用户态』中运行。
协程最关键的是对并发友好,为什么?因为它不需要过多等待,比如协程中我处理 mysql 的耗时任务,协程可以异步处理,发送数据到 mysql 后,我可以挂起(yield)这个协程,去处理其它协程(这个过程是不需要操作系统级别参与的),等那边返回后,我再恢复(resume)之前的协程。就这一点,并发性能就大大增强了。
还有,一个线程中,是可以创建多个协程的。多个协程之间,可以用 Channel 通信。
本作品采用《CC 协议》,转载必须注明作者和本文链接
www.laruence.com/2015/05/28/3038.h...
一篇很好的协程讲解