草庐IT

goroutine2

全部标签

go - 防止 main() 函数在 Goroutine 在 Golang 中完成之前终止

看看这个人为的例子:packagemainimport"fmt"funcprintElo(){fmt.Printf("Elo\n")}funcprintHello(){fmt.Printf("Hello\n")}funcmain(){fmt.Printf("Thiswillprint.")i:=0fori该程序的输出将只是“这将打印”。goroutinesprintElo()和printHello的输出不会被发出,因为我猜main()函数线程将在goroutines完成之前完成甚至有机会开始执行。让类似代码在Golang中工作并且不会过早终止的惯用方法是什么?

go - 防止 main() 函数在 Goroutine 在 Golang 中完成之前终止

看看这个人为的例子:packagemainimport"fmt"funcprintElo(){fmt.Printf("Elo\n")}funcprintHello(){fmt.Printf("Hello\n")}funcmain(){fmt.Printf("Thiswillprint.")i:=0fori该程序的输出将只是“这将打印”。goroutinesprintElo()和printHello的输出不会被发出,因为我猜main()函数线程将在goroutines完成之前完成甚至有机会开始执行。让类似代码在Golang中工作并且不会过早终止的惯用方法是什么?

go - go中一个发生错误,关闭多个goroutine

考虑这个函数:funcdoAllWork()error{varwgsync.WaitGroupfori:=0;i在每个goroutine中,函数work()被调用10次。如果对work()的调用在任何正在运行的goroutine中返回错误,我希望所有goroutine立即停止,并退出程序。在这里使用os.Exit()可以吗?我该如何处理?编辑:这个问题不同于howtostopagoroutine在这里,如果一个错误发生,我需要关闭所有goroutines 最佳答案 您可以使用context为这样的事情创建的包(“带有截止日期,取消信

go - go中一个发生错误,关闭多个goroutine

考虑这个函数:funcdoAllWork()error{varwgsync.WaitGroupfori:=0;i在每个goroutine中,函数work()被调用10次。如果对work()的调用在任何正在运行的goroutine中返回错误,我希望所有goroutine立即停止,并退出程序。在这里使用os.Exit()可以吗?我该如何处理?编辑:这个问题不同于howtostopagoroutine在这里,如果一个错误发生,我需要关闭所有goroutines 最佳答案 您可以使用context为这样的事情创建的包(“带有截止日期,取消信

将产生 goroutines 的 golang 方法

据我所知,如果goroutines太忙,它们会阻止其他goroutines运行。对我来说,这意味着我的应用程序的性能和响应能力可能取决于我是否知道哪些库方法会控制其他goroutine(例如通常是Read()和Write())有什么方法可以让我确切地知道不同的库方法将如何控制其他goroutine,即实际上不会阻塞?有什么方法可以实现调用第三方代码的新方法(包括异步Win32API,如依赖于waitforsingleobject或waitformultipleobjects的findnextchangenotification)并在Go调度程序中表现得“不错”?在这个特定的例子中,系统

将产生 goroutines 的 golang 方法

据我所知,如果goroutines太忙,它们会阻止其他goroutines运行。对我来说,这意味着我的应用程序的性能和响应能力可能取决于我是否知道哪些库方法会控制其他goroutine(例如通常是Read()和Write())有什么方法可以让我确切地知道不同的库方法将如何控制其他goroutine,即实际上不会阻塞?有什么方法可以实现调用第三方代码的新方法(包括异步Win32API,如依赖于waitforsingleobject或waitformultipleobjects的findnextchangenotification)并在Go调度程序中表现得“不错”?在这个特定的例子中,系统

concurrency - 等待 n 个 goroutine 终止

我需要启动大量的goroutine并等待它们终止。直观的方式似乎是使用一个channel来等待它们全部完成:packagemaintypeObjectstruct{//data}func(obj*Object)Update(channelchanint){//updatedatachannel但问题在于对象的数量以及goroutine的数量可能会发生变化。是否可以更改channel的缓冲区大小?是否有更优雅的方式来做到这一点? 最佳答案 我用过WaitGroup作为这个问题的解决方案。翻译您当前的代码,并附上一些日志以明确发生了什么

concurrency - 等待 n 个 goroutine 终止

我需要启动大量的goroutine并等待它们终止。直观的方式似乎是使用一个channel来等待它们全部完成:packagemaintypeObjectstruct{//data}func(obj*Object)Update(channelchanint){//updatedatachannel但问题在于对象的数量以及goroutine的数量可能会发生变化。是否可以更改channel的缓冲区大小?是否有更优雅的方式来做到这一点? 最佳答案 我用过WaitGroup作为这个问题的解决方案。翻译您当前的代码,并附上一些日志以明确发生了什么

concurrency - 计算/显示事件 goroutine 的数量

我有一个队列和一个同时执行出队和入队的函数。我想确保队列中运行的goroutine数量正确,只要列表中有内容即可。这是我正在使用的代码,但我想知道是否有办法打印当前事件的goroutine的数量Linktoplaygroundvarelementintfuncdeen(queuechanint){element:= 最佳答案 有runtime.NumGoroutine但你接近这个错误。您的循环将不断生成goroutine。由于for循环,这将不必要地消耗CPU周期。一种方法是使用sync.WaitGroup。funcdeen(wg*

concurrency - 计算/显示事件 goroutine 的数量

我有一个队列和一个同时执行出队和入队的函数。我想确保队列中运行的goroutine数量正确,只要列表中有内容即可。这是我正在使用的代码,但我想知道是否有办法打印当前事件的goroutine的数量Linktoplaygroundvarelementintfuncdeen(queuechanint){element:= 最佳答案 有runtime.NumGoroutine但你接近这个错误。您的循环将不断生成goroutine。由于for循环,这将不必要地消耗CPU周期。一种方法是使用sync.WaitGroup。funcdeen(wg*