Goroutine(协程) VS 线程
【摘要】 Goroutine是一个函数或方法,它可以独立执行,也可以与程序中的其他Goroutine同时执行。换句话说,在Go语言中,每一个同时执行的活动都被称为一个Goroutine。
1 Goroutine
Goroutine是一个函数或方法,它可以独立执行,也可以与程序中的其他Goroutine同时执行。换句话说,在Go语言中,每一个同时执行的活动都被称为一个Goroutine。
2 线程
线程是操作系统的一部分,它负责执行一个应用程序。每一个在系统上执行的程序都是一个进程,为了运行应用程序里面的代码,一个进程使用了一个叫做线程的术语。线程是一个轻量级的进程,或者换句话说,线程是一个执行程序下代码的单元。所以每个程序都有逻辑,线程负责执行这个逻辑。
3 Goroutine和线程的一些区别
GOROUTINE |
THREAD |
Goroutines是由go运行时管理的。 |
操作系统线程由kernal管理。 |
Goroutine不依赖于硬件。 |
线程是依赖于硬件的。 |
Goroutine有简单的交流媒介,称为通道。 |
线程没有方便的交流媒介。 |
由于通道的存在,一个goroutine可以与其他goroutine进行低延迟的通信。 |
由于缺乏简单的通信媒介,线程间的通信存在了高延迟。 |
Goroutine没有ID,因为go没有线程本地存储。 |
线程有自己独特的ID,因为它们有线程本地存储。 |
Goroutines比线程代价低。 |
线程的代价比Goroutines高。 |
调度是协同式的。 |
调度是预先安排好的。 |
启动比线程快。 |
启动比Goroutines慢。 |
Goroutine有可生长的分段堆栈。 |
线程没有可生长的分段堆栈。 |
4 参考
https://www.geeksforgeeks.org/golang-goroutine-vs-thread/
https://codeburst.io/why-goroutines-are-not-lightweight-threads-7c460c1f155f
https://rcoh.me/posts/why-you-can-have-a-million-go-routines-but-only-1000-java-threads/
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)