浅谈协程,线程

线程

线程是基本执行单位,线程是需要被分配系统资源的,是需要系统来调度的,有上下文切换耗时,IO 操作,网络请求等待。。。

它可以运行于 CPU 的多核,适合『并行』 处理任务。注意是并行,不是并发,举个通俗的例子,周伯通的左右互搏,左手画方,右手画圆,互不干扰。

并发,比如你一边看书,一边记笔记,偶尔停下来喝口水,这就属于并发。所以为什么线程的并发还是性能不高,正是因为有很多等待过程,CPU切换等待,网络等待,IO等待。

协程

协程也可以看作是一种线程,不过它更轻量化,所以常常说为『轻量级线程』。

协程是不需要系统调度的,由编程语言自身完成,也就大大降低了系统资源开销,它属于『用户态』中运行。

协程最关键的是对并发友好,为什么?因为它不需要过多等待,比如协程中我处理 mysql 的耗时任务,协程可以异步处理,发送数据到 mysql 后,我可以挂起(yield)这个协程,去处理其它协程(这个过程是不需要操作系统级别参与的),等那边返回后,我再恢复(resume)之前的协程。就这一点,并发性能就大大增强了。

还有,一个线程中,是可以创建多个协程的。多个协程之间,可以用 Channel 通信。

本作品采用《CC 协议》,转载必须注明作者和本文链接
六月的风
Junwind
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1
九霄道长

www.laruence.com/2015/05/28/3038.h...

一篇很好的协程讲解

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!