草庐IT

GoRoutine

全部标签

memory - 进程和Golang中的Goroutine一样吗?

对于下面的代码:funcmain(){goRtns:=runtime.NumGoroutine()fmt.Println("goroutines:",goRtns)}输出是1。但这是在一个“进程”中,没有明确调用goroutines:“在计算中,进程是正在执行的计算机程序的实例。它包含程序代码及其当前事件。根据操作系统(OS),进程可能由多个线程组成并发执行指令的执行。”也来自KrishnaSundarram的优秀博客文章“goroutines的工作原理”:http://blog.nindalf.com/how-goroutines-work/“goroutine的创建不需要太多内存—

go - 像 erlang spawn 这样的 goroutine 可以跨多个主机透明地处理吗?

据说如果给erlang配置cookie设置,erlang的进程可以跨机器运行,这对调用者是透明的。goroutine可以这样运行吗? 最佳答案 这不是语言的特性,不是。但是,由于该语言没有办法询问goroutines(例如,获取线程ID或像其他一些语言一样从不同的goroutine控制它们),只要您可以设置透明的通信机制(例如,通过网络工作的channel),您可以创建类似的效果。事实上,Go的创造者之一RobPike过去曾玩弄过一个他称为“netchan”的包来做这件事,但是couldn'tgetthesemanticsright

go - 像 erlang spawn 这样的 goroutine 可以跨多个主机透明地处理吗?

据说如果给erlang配置cookie设置,erlang的进程可以跨机器运行,这对调用者是透明的。goroutine可以这样运行吗? 最佳答案 这不是语言的特性,不是。但是,由于该语言没有办法询问goroutines(例如,获取线程ID或像其他一些语言一样从不同的goroutine控制它们),只要您可以设置透明的通信机制(例如,通过网络工作的channel),您可以创建类似的效果。事实上,Go的创造者之一RobPike过去曾玩弄过一个他称为“netchan”的包来做这件事,但是couldn'tgetthesemanticsright

其他语言的 Goroutine 类似物

并发是编程中真正困难的部分。最近一段时间goroutine很火。我的问题是-其他语言中存在什么样的goroutine类似物? 最佳答案 goroutine的灵感来自CSP(Communicatingsequentialprocesses),这在occam的设计中具有很大的影响力。编程语言,也影响了编程语言的设计,例如Limbo,RaftLib,Go,和Crystal.请注意goroutinearenotwithoutcriticisms.它不同于ActorModel在那:CSP进程是匿名的,而参与者具有身份。CSP消息传递从根本上涉

其他语言的 Goroutine 类似物

并发是编程中真正困难的部分。最近一段时间goroutine很火。我的问题是-其他语言中存在什么样的goroutine类似物? 最佳答案 goroutine的灵感来自CSP(Communicatingsequentialprocesses),这在occam的设计中具有很大的影响力。编程语言,也影响了编程语言的设计,例如Limbo,RaftLib,Go,和Crystal.请注意goroutinearenotwithoutcriticisms.它不同于ActorModel在那:CSP进程是匿名的,而参与者具有身份。CSP消息传递从根本上涉

go - Go程序中的三个后台goroutine是什么?

Go似乎总是有至少4个goroutines在任何给定时间运行。另外三个不是主goroutine的是什么?http://play.golang.org/p/MQBiLmHXBKpackagemainimport("fmt""runtime")funcmain(){fmt.Println(runtime.NumGoroutine())//4} 最佳答案 这些不是线程,它们是goroutine,数量可能会根据当前的实现而有所不同(即在go1.2中它会打印2)。现在,看起来您有1个用于main,3个用于runtime/gc。import"f

go - Go程序中的三个后台goroutine是什么?

Go似乎总是有至少4个goroutines在任何给定时间运行。另外三个不是主goroutine的是什么?http://play.golang.org/p/MQBiLmHXBKpackagemainimport("fmt""runtime")funcmain(){fmt.Println(runtime.NumGoroutine())//4} 最佳答案 这些不是线程,它们是goroutine,数量可能会根据当前的实现而有所不同(即在go1.2中它会打印2)。现在,看起来您有1个用于main,3个用于runtime/gc。import"f

multithreading - 当 goroutine 在 I/O 上阻塞时,调度程序如何识别它已停止阻塞?

从我读到的here,golang调度程序将自动确定一个goroutine是否在I/O上阻塞,并自动切换到在未阻塞的线程上处理其他goroutine。我想知道的是,调度程序随后如何确定该goroutine已停止阻塞I/O。它是否只是经常进行某种轮询以检查它是否仍在阻塞?是否有某种后台线程在运行以检查所有goroutine的状态?例如,如果您要在一个goroutine中执行HTTPGET请求,需要5秒才能获得响应,它会在等待响应时阻塞,调度程序将切换到处理另一个goroutine。既然如此,当服务器返回响应时,调度程序如何知道响应已经到达,是时候回到进行GET的goroutine以便它可以

multithreading - 当 goroutine 在 I/O 上阻塞时,调度程序如何识别它已停止阻塞?

从我读到的here,golang调度程序将自动确定一个goroutine是否在I/O上阻塞,并自动切换到在未阻塞的线程上处理其他goroutine。我想知道的是,调度程序随后如何确定该goroutine已停止阻塞I/O。它是否只是经常进行某种轮询以检查它是否仍在阻塞?是否有某种后台线程在运行以检查所有goroutine的状态?例如,如果您要在一个goroutine中执行HTTPGET请求,需要5秒才能获得响应,它会在等待响应时阻塞,调度程序将切换到处理另一个goroutine。既然如此,当服务器返回响应时,调度程序如何知道响应已经到达,是时候回到进行GET的goroutine以便它可以

multithreading - Golang 如何在 goroutine 之间共享变量?

这个问题在这里已经有了答案:WhydoesGohandleclosuresdifferentlyingoroutines?(2个答案)关闭7个月前。我正在学习Go并试图了解它的并发特性。我有以下程序。packagemainimport("fmt""sync")funcmain(){varwgsync.WaitGroupfori:=0;i执行时我得到:40132这正是我想要的。但是,如果我稍微修改一下:packagemainimport("fmt""sync")funcmain(){varwgsync.WaitGroupfori:=0;i我得到的将是:55555我不太明白其中的区别。任何