首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >金刚线数误导性

金刚线数误导性
EN

Stack Overflow用户
提问于 2014-07-29 21:58:23
回答 3查看 2.3K关注 0票数 3

我在go上编写了一个小应用程序,它启动4个线程来执行各种事情+一个主线程。总共有5个线程。但是,如果我要启动活动监视和监视过程,这就是我所看到的

首先,为什么7个线程。而且它不是固定不变的。有时是5,而其他时候是7。同时,主线程结束后启动的所有4个线程,它们都是由主线程启动的。我通过在线程顶部放置一个differ语句来验证线程的结束。活动监视器中的线程计数仍然保持在7。

有人知道这是怎么回事吗?这些额外的线程是否由go运行时启动?有没有办法找出有多少线程是活动的,我的程序是由我的代码启动的,而不是通过go运行时启动的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-29 22:02:25

是的,它们是由运行时启动的,例如,sO --它将打印4个goroutines正在运行。

goroutines不是线程,一个OS线程可以处理100多个goroutines,但是如果您正在执行一些繁重的任务或使用阻塞系统调用,运行时将启动一个新线程来处理其他Goroutines。

票数 8
EN

Stack Overflow用户

发布于 2014-07-29 22:03:16

我想当你说线程的时候你是指Goroutines。

Go运行时透明地将轻量级Goroutines多路复用到OS线程上。这也是为什么您不需要调用像select()这样的函数--这是运行时的工作。

如果您生成了7个Go例程,其中一些会阻塞,运行时可能会决定终止空闲的OS线程。这就是为什么你看到的线程比去例程少。

票数 3
EN

Stack Overflow用户

发布于 2014-07-30 03:09:32

我想你把Goroutines误认为是线。

在go程序中,您指的线程实际上是goroutine,它是coroutine,而不是真正的线程,它由go的运行时实现(您需要了解go运行时,每个go程序都运行在运行时上,运行时实际上使用线程来实现大猩猩).Diffrent goroutine可能运行在同一个线程中,也可能不是,但您永远不知道。您可以使用runtime.GOMAXPROCS的多核cpu .

你在监视器中看到的线程是真正的线程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25025662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档