Goroutine(协程) VS 线程
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/
- 点赞
- 收藏
- 关注作者
评论(0)