Golang:线程 和 协程 的区别
目录 前言 协程 和线程的整体对比 协程的特点 第 1 和 第 2 点 特点中的第 3 和 第 4 点 前言 19年也快结束了。现在的总结更多是放在了草稿 而没有发出,这次详细分享下在 Go 中,线程和协程的区别及其关系。 协程 协程,英文名Coroutine。但在 Go 语言中,协程的英文名是:gorutine。它常常被用于进行多任务,即并发作业。没错,就是多线程作业的那个作业。 虽然在 Go 中,我们不用直接编写线程之类的代码来进行并发,但是 Go 的协程却依赖于线程来进行。 下面我们来看看它们的区别。 线程的基础介绍,这里请自行网上搜索文章,因为关于线程的优秀介绍文章已经很多。 协程的特点 这里先直接列出线程的特点,然后从例子中进行解析。 多个协程可由一个或多个线程管理, 协程的调度 发生在其所在的线程中。 可以被调度, 调度策略 由应用层代码定义,即可被高度自定义实现。 执行效率高。 占用内存少。 上面 第 1 和 第 2 点 我们来看一个例子: func TestGorutine ( t * testing . T ) { runtime . GOMAXPROCS ( 1 ) // 指定最大 P 为 1,从而管理协程最多的线程为 1 个 wg : = sync . WaitGroup { } // 控制等待所有协程都执行完再退出程序 wg . Add ( 2 ) //