草庐IT

goroutine2

全部标签

go - 打断休眠的 goroutine?

有什么方法可以让我执行,例如time.Sleep(time.Second*5000)//basicallyalongperiodoftime然后在我希望的时候“唤醒”休眠的goroutine?我看到Sleep.go中有一个Reset(dDuration),但我无法调用它。有什么想法吗? 最佳答案 没有办法中断time.Sleep,但是,您可以使用time.After。,和一个select语句来获得你想要的功能。展示基本思想的简单示例:packagemainimport("fmt""time")funcmain(){timeoutch

go - 如何向 goroutine 发出停止运行的信号?

我正在尝试停止go例程,但我找不到实现此目的的方法。我正在考虑使用第二个channel,但如果我从中读取它会阻止它,不是吗?。这是一些代码,我希望它能解释我正在尝试做的事情。packagemainimport"fmt"import"time"funcmain(){vartooLateboolproCh:=make(chanstring)gofunc(){for{fmt.Println("working")//ifistooLatewestop/returnitiftooLate{fmt.Println("stopped")return}//processingsomedataandse

没有 goroutines 覆盖的 Go lang 全局变量

我正在用Go编写一个CMS,并且有一个session类型(用户ID、要呈现的页面内容等)。理想情况下,我希望该类型是一个全局变量,这样我就不必通过所有嵌套函数传播它,但是拥有一个这样的全局变量显然意味着每个新session都会覆盖它的前任,这不必要地说,将是一个史诗般的失败。一些语言提供了一种在线程中拥有全局变量的方法,这些全局变量被保存在该线程中(即,该全局变量的值在该线程中被沙盒化)。虽然我知道Goroutines不是线程,但我只是想知道是否有类似的方法可供我使用,或者我是否必须通过各种嵌套例程向下传递我的session类型的本地指针。我猜channel不会这样做?据我所知(如果我

戈朗 : how to print data from running goroutine at fixed intervals?

我在理解golang中的channel时遇到了一些问题。据我所知,channel是在给定时间间隔内将数据发布到控制台的正确方式。假设我有一个正在工作的goroutine,然后在我的主循环中我想每秒从那个goroutine打印数据。如何编写这样的代码?一个简单的例子将不胜感激。 最佳答案 您可以在内存中拥有一些protected共享状态,您可以从长时间运行的进程中更新这些状态。然后你有一个计时器每秒触发一次共享状态检查。这是一个简单的例子:http://play.golang.org/p/gfGvhHUWIc代码:packagemai

go - 惯用的 goroutine 终止和错误处理

我在go中有一个简单的并发用例,但我想不出一个优雅的解决方案来解决我的问题。我想编写一个方法fetchAll,它可以从远程服务器并行查询未指定数量的资源。如果任何提取失败,我想立即返回第一个错误。我最初的实现泄漏了goroutines:packagemainimport("fmt""math/rand""sync""time")funcfetchAll()error{wg:=sync.WaitGroup{}errs:=make(chanerror)leaks:=make(map[int]struct{})deferfmt.Println("thesegoroutinesleaked:"

go - 在 http 处理程序中使用 Goroutines 进行后台工作

我以为我找到了一种立即返回HTTP响应然后在后台执行一些工作而不会阻塞的简单方法。但是,这不起作用。funcMyHandler(whttp.ResponseWriter,r*http.Request){//handleformvaluesgodoSomeBackgroundWork()//thiswilltake2or3secondsw.WriteHeader(http.StatusOK)}它第一次工作——立即返回响应并启动后台工作。但是,任何进一步的请求都会挂起,直到后台goroutine完成。有没有更好的方法来做到这一点,而不涉及设置消息队列和单独的后台进程。

go - 强制 goroutines 进入同一个线程

有没有办法确保goroutine只在特定的OS线程中运行?例如,当GUI操作必须在GUI线程中运行时,但可能有多个goroutine运行GUI代码。GOMAXPROCS(1)在技术上完成了这项工作,但这违背了多线程的目的。LockOSThread()也可以工作,但这会阻止任何其他goroutine在该线程中运行。有没有办法做到这一点,或者所有需要同一个线程的东西都必须在同一个goroutine中运行? 最佳答案 据我所知,目前没有。我认为这样做的“类似”方法是编写一个在GUI线程中运行的Goroutine,并为来自通过channel

go - 单 channel 上的 Goroutine 解锁顺序

Goroutines在channel上阻塞的顺序是否决定了它们解除阻塞的顺序?我不关心发送的消息的顺序(它们保证是有序的),但会解除阻塞的Goroutines的顺序。想象一个在多个Goroutine(1、2和3)之间共享的空Channelch,每个Goroutine都试图在ch上接收消息。由于ch为空,每个Goroutine都会阻塞。当我向ch发送消息时,Goroutine1会先解除阻塞吗?或者2或3可能会收到第一条消息?(反之亦然,Goroutines试图发送)我有一个playground这似乎表明Goroutines阻塞的顺序是它们被解除阻塞的顺序,但我不确定这是否是由于实现而导致

concurrency - 我们应该做嵌套的 goroutines 吗?

我正在尝试为大量文件构建解析器,但我找不到可能称为“嵌套goroutines”的信息(也许这不是正确的名称?)。给定很多文件,每个文件都有很多行。我应该这样做:forfileinfolder:godo1defdo1:forlineinfile:godo2defdo2:do_something或者我应该只使用“一个级别”的goroutine,并执行以下操作:forfileinfolder:forlineinfile:godo_something我的问题主要针对性能问题。感谢您说出那句话! 最佳答案 如果您使用您指定的架构,您很有可能会

go - runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

我知道在Go中,runtime.LockOSThread()将goroutine绑定(bind)到一个OS线程,并且不允许其他goroutine在该线程中执行。对于子goroutines也是如此吗?例如:runtime.LockOSThread()gofunc(){gofunc(){//Dosomething}()//Dosomething}()这两个goroutine是在一个独占的操作系统线程中执行还是只在第一个线程中执行? 最佳答案 Thedocumentation对于runtime.LockOSThread说:LockOSTh