3 回答
TA贡献1839条经验 获得超15个赞
是什么让您认为Go使用用户空间线程?
没有。它使用OS线程,并且可以利用多个内核。
您可能会对以下事实感到困惑:默认情况下,Go仅使用1个线程来运行您的程序。如果启动两个goroutine,它们将在一个线程中运行。但是,如果一个I / O的goroutine块创建了第二个线程,并继续在新线程上运行另一个goroutine。
如果您确实想解锁全部的多核功能,请使用该GOMAXPROCS()
功能。
runtime.GOMAXPROCS(4); //somewhere in main
现在,您的程序将使用4个OS线程(而不是1个),并且将能够完全使用例如4个核心系统。
TA贡献1779条经验 获得超6个赞
我假设“用户空间线程”是指(例如)Go的goroutine。
的确,使用goroutines进行并发要比设计(通过手工和科学计算)为OS线程分配工作单元的专用算法效率低。
但是:每个Go程序都位于一个环境中,旨在解决特定问题。可以为环境对Go程序提出的每个请求启动一个新的goroutine。如果环境正在向Go程序发出并发请求,则即使Go程序仅使用1个OS线程,使用goroutines的Go程序也可能比串行程序运行得更快。goroutine能够以更高的速度处理请求的原因(即使仅使用1个OS线程)是因为,当与A关联的环境部分暂时无法执行时,Go程序会自动从goroutine A切换到goroutineB。回应。
但是,是的,的确,使用goroutine并将它们自动分配给多个OS线程确实比设计(通过手工和科学计算)为OS线程分配工作单元的专用算法效率低。
- 3 回答
- 0 关注
- 215 浏览
添加回答
举报