Go 的多线程和 pthread 或 Java 线程之间有什么区别?

2022-09-01 07:35:18

Go的多线程方法与其他方法(如pthread,boost::thread或Java Threads)有什么区别?


答案 1

引用自第3天教程< - 阅读本文以获取更多信息。

Goroutines根据需要多路复用到系统线程上。当 goroutine 执行阻塞系统调用时,不会阻止任何其他 goroutine。

我们将在某个时候对CPU密集型goroutines做同样的事情,但现在,如果你想要用户级的并行性,你必须设置$GOMAXPROCS。或调用运行时。GOMAXPROCS(n).

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

需要时,可以将多个 gorouitines 多路复用到单个线程中。

更重要的是,这个概念如上所述,goroutine是一个顺序程序,可以阻止自身,但不会阻止其他goroutine。

Goroutines在gccgo中作为pthreads实现,因此它也可以与OS线程相同。它将操作系统线程的概念和我们在编程时对多线程的思考分开。


答案 2

IMO,使Go中的多线程吸引人的是通信设施:与必须构建通信基础设施(互斥体,队列等)的pthread不同,在Go中,它默认以方便的形式提供。

简而言之,由于良好的通信设施(如果我可以这么说,类似于Erlang),因此使用线程具有“低摩擦性”)。


推荐