Go的多线程方法与其他方法(如pthread、Boost::Thread或Java Thread)有什么不同?

推荐答案

引用自Day 3 Tutorial<;-阅读本文了解更多信息.

Goroutine根据需要进行多路复用 放到系统线程上.当一只猩猩 执行阻塞系统调用,则为no 其他的猩猩线路被封锁了.

我们将对CPU绑定执行同样的操作 在某种程度上是大猩猩,但现在, 如果您想要用户级并行性,您可以 必须设置$GOMAXPROCS.或致电 runtime.GOMAXPROCS(N).

Goroutine不一定对应于OS线程.它可以具有较小的初始堆栈大小,并且堆栈将根据需要增长.

当需要时,多个gorouitine可以被多路复用到一个线程中.

更重要的是,如上所述,大猩猩的概念是,大猩猩是一个连续的程序,它可以挡路自己,但不挡路其他大猩猩.

Goroutines在gccgo中实现为pthread,因此它也可以与OS线程相同. 它分离了操作系统线程的概念和我们在编程时的多线程思维.

Go相关问答推荐

Pulumi-S3-当策略依赖于访问点时,如何将AccesspintPolicy附加到访问点

CGO如何转换为文件*类型

[0]Func()as";请勿比较哨兵类型

按键值排序字符串- Golang

带有一个新变量的Go冒号等于运算符

允许在 struct 中使用复合作为函数参数

CURL和Postman HTTP POST工作,但Golang请求失败,状态为400

在整个SQL事务中将使用上下文作为默认设置吗?

将DATE类型的SQL字段扫描到GO struct 字段

通过渠道和goroutines增值1000倍

如何将Golang测试用例的测试覆盖率值与特定阈值进行比较

在VSCode中如何使用特定的文件名提供编译命令

通过多阶段构建复制到 Docker 容器中时找不到文件

Go Programming Language书上的例子server2错了吗?

在 Go sync.Map 中,为什么这部分实现不一致或者我误解了什么?

Golang crypto/rand 线程安全吗?

Golang:如何判断通过缓冲通道进行通信时生产者或消费者是否较慢?

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

如何使用 math/big 对 bigInt 进行取模?

我应该明确地创建一个与Belongs To或Has Many对称的关系吗?