草庐IT

GoRoutine

全部标签

go - 使用 goroutine 进行矩阵乘法会降低性能

我正在通过Go中的goroutines优化矩阵乘法。我的基准测试表明,每行或每元素引入并发会大大降低性能:goos:darwingoarch:amd64BenchmarkMatrixDotNaive/A.MultNaive-82000000869ns/op0B/op0allocs/opBenchmarkMatrixDotNaive/A.ParalMultNaivePerRow-810000014467ns/op80B/op9allocs/opBenchmarkMatrixDotNaive/A.ParalMultNaivePerElem-82000077299ns/op528B/op65

go - main 函数是否运行一个 goroutine?

main()函数是goroutine吗?例如,我看到了如下所示的崩溃堆栈跟踪,这让我想问:goroutine1[running]:main.binarySearch(0x0,0x61,0x43,0xc420043e70,0x19,0x19,0x10)/home/---/go/src/github.com/----/sumnum.go:22+0x80main.main()/home/---/go/src/github.com/---/sumnum.go:13+0xc1exitstatus2 最佳答案 Isthemainfunction

go - 如何知道 goroutine 是否还存在?

goroutine有类似javaThread.isAlive()的函数吗?我正在尝试生成一些goroutine,该goroutine应该是长期存在的线程,但我担心goroutine会在进程中途死亡,是否可以在我的主线程中检查goroutine是否还活着? 最佳答案 最好的方法不是知道它是否还活着,而是知道它什么时候死了,这样你就可以重新启动它。您可以通过在您的goroutine上设置一个defer和一个recover来做到这一点,这将写入一个channel,表示goroutine的死亡。然后在主goroutine上,你从那个chan

go - 如何停止正在监听 RethinkDB 变更源的 goroutine?

我正在尝试弄清楚如何将RethinkDB变更源与golang一起使用。我的具体问题是如何停止监听更改的goroutine数据库。例如,参见下面的函数getData()。我从处理程序运行它通过调用gogetData(c)函数。每当数据库更新时,记录是传递给channelc,然后传递给处理函数并发送给客户端使用SSE技术。我的问题是:当客户端断开连接时,我知道如何停止和退出处理函数;然而,运行getData()函数的goroutine会继续运行。什么可以我要关闭它吗?基于stackoverflow上的其他答案,我能想到的一种解决方案是发送信号关闭另一个channel上的goroutine并

go - 我们可以在goroutine中实现goroutine吗?

我在函数中使用了goroutines,因为我想要函数何时启动,然后数据库的查询也在那个时间运行。但是有一个问题我要问我们可以在另一个goroutine中实现一个goroutine因为在函数中我已经设置了一个goroutine但是在那个goroutine中有更多的查询而且我希望它们在父goroutine时也运行开始。例子funcmain(){wg:=&sync.WaitGroup{}wg.Add(1)gofunc(){deferwg.Done()Id,err:=QueryWhichWillReturnId()iferr==nil{wg.Add(1)gofunc(){deferwg.Don

go - 检测同一个 goroutine 连续两次调用 sync.Mutex.Lock()

此代码(单线程程序)将永远无法运行:funcTestDoubleLockPanics(t*testing.T){varmusync.Mutexmu.Lock()mu.Lock()}但是,当我运行这个测试时,没有出现panic。竞争检测器不会打印出数据竞争。govet没有提示,没有日志消息,它只是永远阻塞。(我关心的实际代码显然不是这么简单-我只是将其归结为本质。)当持有锁的线程试图重新获取同一个锁时,有什么方法可以让Go大声告诉我吗? 最佳答案 Go的sync.Mutex对象不会跟踪哪个goroutine锁定了它们。或者,换句话说,

windows - 在特定的 CPU 上运行,而不是一个 goroutine?

golang只有一个方法runtime.GOMAXPROCS(1)来设置应用程序同时运行一个goroutine,但我想让应用程序只在特定的cpu上运行? 最佳答案 要启动您的Go二进制文件,请说example.exe以便它仅在Windows的CPU0上运行,您可以使用带有“affinity”参数的start命令:start/affinity1example.exe我不知道你到底想达到什么目的,但请引用thisdocumentdescribingGOMAXPROCS-Go运行时可能会更有效地做同样的事情。

go - 为什么 goroutine 的竞争条件不会在某个时候发生?

我正在阅读go-in-action。这个例子来自chapter6/listing09.go。//Thissampleprogramdemonstrateshowtocreaterace//conditionsinourprograms.Wedon'twanttodothis.packagemainimport("fmt""runtime""sync")var(//counterisavariableincrementedbyallgoroutines.counterint//wgisusedtowaitfortheprogramtofinish.wgsync.WaitGroup)//m

go - 将 context.Context 传递给在单独的 goroutine 中执行的闭包的最佳方法

将context.Context传递给闭包以在单独的goroutine中执行的最佳方法是什么?因为我没有在闭包内改变context.Context,所以我假设这两个选项都是有效的。第二个选项可以通过不复制界面来为我节省一点内存。1)作为参数传递funcrun(ctxcontext.Context){fori:=0;i2)公开外部上下文变量funcrun(ctxcontext.Context){fori:=0;i 最佳答案 两者都应该没问题。要记住的关键是上下文是不可变的。这意味着当您尝试读取上下文时,不存在其他goroutine正在

go - 如何使用 Sarama 在多个 goroutine 中消费 Kafka 主题?

我使用https://github.com/Shopify/sarama用于与Kafka交互。我有一个主题,例如,100个分区。我有一个部署在1台主机上的应用程序。所以,我想在多个goroutine中使用这个主题。我看到这个例子-https://github.com/Shopify/sarama/blob/master/examples/consumergroup/main.go,在其中我们可以看到,如何在特定的消费者组中创建消费者。所以,我的问题是,我应该创建多个这样的消费者,还是在Sarama中有一些设置,我可以在其中设置所需数量的消费者goroutine。附言我看到这个问题-ht