草庐IT

GoRoutine

全部标签

multithreading - GoLang 程序在单线程上执行,即使使用 GOMAXPROCS(4)

在下面的GoLang程序中,我试图实现stablemarriageproblem对于N个男人和N个女人,使用2*N个协程(每个男人和女人1个)。程序严格遵循程序定义,因为每个goroutine(读作“每个男人”)通过channel向所需的女性goroutine发送消息,而女性goroutine反过来拒绝/接受他的提议。我希望该程序可以在设置runtime.GOMAXPROCS(4)时轻松地安排在多个线程上,但是它仍然(几乎)在完全相同的时间运行(并且运行linux命令time仍然显示100%的CPU使用率,而不是预期的400%)packagemainimport("fmt""runti

go - 获取等待写入 channel /从 channel 读取的 goroutines 的数量(用于分析)

为了分析我的应用程序,我想知道有多少goroutines正在等待写入channel或从channel读取;我在reflectpackage中找不到任何相关内容.我当然可以维护一个明确的计数器,但我希望golang运行时知道这一点,所以我尽量避免重新发明轮子。那么,有没有一种方法可以在不手动维护计数器的情况下做到这一点? 最佳答案 要跟踪整体负载,您可能正在寻找runtime.NumGoroutine()https://golang.org/pkg/runtime/#NumGoroutine虽然它不是刚刚被阻塞的Go例程的确切数量,但

go - 获取等待写入 channel /从 channel 读取的 goroutines 的数量(用于分析)

为了分析我的应用程序,我想知道有多少goroutines正在等待写入channel或从channel读取;我在reflectpackage中找不到任何相关内容.我当然可以维护一个明确的计数器,但我希望golang运行时知道这一点,所以我尽量避免重新发明轮子。那么,有没有一种方法可以在不手动维护计数器的情况下做到这一点? 最佳答案 要跟踪整体负载,您可能正在寻找runtime.NumGoroutine()https://golang.org/pkg/runtime/#NumGoroutine虽然它不是刚刚被阻塞的Go例程的确切数量,但

sorting - 使用 goroutines 合并排序与普通 Mergesort

我在Go中编写了两个版本的归并排序。一个有goroutines,另一个没有。我正在比较每一个的性能,并且我不断看到https://github.com/denniss/goplayground/blob/master/src/example/sort.go#L69这就是使用goroutines的那个。这是没有的https://github.com/denniss/goplayground/blob/master/src/example/sort.go#L8我一直在试图弄清楚为什么goroutine实现的性能比没有goroutine的要差得多。这是我在本地看到的号码gorunsrc/ma

sorting - 使用 goroutines 合并排序与普通 Mergesort

我在Go中编写了两个版本的归并排序。一个有goroutines,另一个没有。我正在比较每一个的性能,并且我不断看到https://github.com/denniss/goplayground/blob/master/src/example/sort.go#L69这就是使用goroutines的那个。这是没有的https://github.com/denniss/goplayground/blob/master/src/example/sort.go#L8我一直在试图弄清楚为什么goroutine实现的性能比没有goroutine的要差得多。这是我在本地看到的号码gorunsrc/ma

go - 如何调整用于下载 N 个文件的 goroutines 的数量?

我正在制作一个Golang程序,它需要下载N个文件,然后对每个文件执行一些任务。特别是对每个SWF文件都有一个操作管道:发起httpget请求获取文件保存在本地将其转换为PNG按顺序执行可能效率很低。使用N个goroutine也可能不是最优的。如何选择/限制goroutines的数量? 最佳答案 Agoroutine设计轻巧:Agoroutinehasasimplemodel:itisafunctionexecutingconcurrentlywithothergoroutinesinthesameaddressspace.Itis

go - 如何调整用于下载 N 个文件的 goroutines 的数量?

我正在制作一个Golang程序,它需要下载N个文件,然后对每个文件执行一些任务。特别是对每个SWF文件都有一个操作管道:发起httpget请求获取文件保存在本地将其转换为PNG按顺序执行可能效率很低。使用N个goroutine也可能不是最优的。如何选择/限制goroutines的数量? 最佳答案 Agoroutine设计轻巧:Agoroutinehasasimplemodel:itisafunctionexecutingconcurrentlywithothergoroutinesinthesameaddressspace.Itis

go - Housie 程序中的死锁。生产者消费者模式

我正在尝试实现一个housie游戏,其中一个goroutine生成数字,其他3个goroutine检查这些是否在它们的token中,并通知生产者它们的所有数字是否都已生成。我已经通过以下方式在golang中实现了它。这会导致死锁。知道为什么会这样吗?这是一个“作业题”,我只是在go中实现它以更好地学习go。packagemainimport("fmt""math/rand")typePersonIDintfunccontains(s[]int,eint)bool{for_,a:=ranges{ifa==e{returntrue}}returnfalse}funcPerson(calle

go - Housie 程序中的死锁。生产者消费者模式

我正在尝试实现一个housie游戏,其中一个goroutine生成数字,其他3个goroutine检查这些是否在它们的token中,并通知生产者它们的所有数字是否都已生成。我已经通过以下方式在golang中实现了它。这会导致死锁。知道为什么会这样吗?这是一个“作业题”,我只是在go中实现它以更好地学习go。packagemainimport("fmt""math/rand")typePersonIDintfunccontains(s[]int,eint)bool{for_,a:=ranges{ifa==e{returntrue}}returnfalse}funcPerson(calle

http - 所有独立的任务都应该在 http 请求 goroutine 之外处理吗?

由于golang在单独的goroutines中处理传入请求,我不清楚哪些类型的任务应该被延迟以由消息队列处理,例如NSQ消费者,哪些应该在http请求goroutine中处理。 最佳答案 由于net/http包运行每个请求,您无需担心阻塞请求goroutine。您应该问自己的真正问题是“我是否需要在向客户返回响应之前执行此操作,还是可以推迟到以后再做”。通常,如果我需要从数据库中获取数据来提供响应,这将阻止请求goroutine,那没关系。如果我现在可以返回响应并将消息放入队列中以供稍后处理,那也可以。由于requestgorout