草庐IT

goroutine2

全部标签

goroutines 的执行顺序

我试图理解这段代码,不确定为什么第二次执行在第一次执行之前。如果有人真的能帮我解决这个问题,那就太好了!funcsum(a[]int,cchanint){fmt.Println("summing:",a)total:=0for_,v:=rangea{total+=v}//fmt.Println("sendtoc",total)c输出:summing:[456]15summing:[123]6 最佳答案 您没有明确同步两个goroutine的顺序。如果您运行此程序足够多次,您将看到以不同的顺序打印对fmt.Println的调用。当执行

go - 如何运行多个 goroutines 并以相同的运行顺序收集结果

我有以下代码,它有一个double-go例程结构:packagemainimport("fmt""math/rand""time""strconv")funcmain(){outchan:=make(chanstring)fori:=0;i我期待的输出是0-01234567891-01234567892-01234567893-01234567894-01234567895-01234567896-01234567897-01234567898-01234567899-0123456789但我却得到了这个:7-79803452616-40358976213-90475268319-40

csv - 使用 Goroutines 同时加载大型 CSV 时的未定义行为

我正在尝试使用Golang使用goroutines加载一个大的CSV文件。csv的维度是(254882,100)。但是当我解析csv并将其存储到2D列表中时使用我的goroutines,我得到的行小于254882并且每次运行的数量都不同。我觉得这是由于goroutines而发生的,但似乎无法指出原因。谁能帮帮我吗。我也是Golang的新手。下面是我的代码funcloadCSV(csvFilestring)(*[][]float64,error){startTime:=time.Now()vardataset[][]float64f,err:=os.Open(csvFile)iferr!

http - 在 http 处理程序中执行 Goroutine

如果我在http处理程序中启动一个goroutine,它是否会在返回响应后完成?这是一个示例代码:packagemainimport("fmt""net/http""time")funcworker(){fmt.Println("workerstarted")time.Sleep(time.Second*10)fmt.Println("workercompleted")}funcHomeHandler(whttp.ResponseWriter,r*http.Request){goworker()w.Write([]byte("Hello,World!"))}funcmain(){htt

Golang goroutine 不能使用函数返回值

我希望我可以用golang做类似下面代码的事情:packagemainimport("fmt""time")funcgetA()(int){fmt.Println("getA:Calculating...")time.Sleep(300*time.Millisecond)fmt.Println("getA:Done!")return100}funcgetB()(int){fmt.Println("getB:Calculating...")time.Sleep(400*time.Millisecond)fmt.Println("getB:Done!")return200}funcmain

multithreading - 为什么我的 goroutines 在完成时互相等待而不是完成?

我是Go的新手,我的代码中有一件事我不明白。我写了一个简单的冒泡排序算法(我知道它不是很有效;))。现在我想启动3个GoRoutines。每个线程都应该独立于其他线程对其数组进行排序。完成后,函数。应该打印一条“完成”消息。这是我的代码:packagemainimport("fmt""time"//fortimefunctionse.g.Now()"math/rand"//forpseudorandomnumbers)/*Simplebubblesortalgorithm*/funcbubblesort(strstring,a[]int)[]int{forn:=len(a);n>1;n

go - 为什么带有网络 I/O 的 goroutines 被阻塞了?

我在Ubuntu13.04上使用go1.1develgoversiondevel+ebe8bca920adWedMay1515:34:472013+1000linux/386根据http://golang.org/doc/faq#goroutinesWhenacoroutineblocks,suchasbycallingablockingsystemcall,therun-timeautomaticallymovesothercoroutinesonthesameoperatingsystemthreadtoadifferent,runnablethreadsotheywon'tbeb

concurrency - 是否有可能从 Go 中的多个 goroutines 中的一个接收结果?

我最近才了解Google的编程语言Go。我对它提供的并发支持很感兴趣,并着手了解更多相关信息。然而,我去看看Go是如何实现并发的一个特定特性的,到目前为止我还没有看到任何证据表明这个特性存在。这是一个假设情况:假设我们正在编写一个函数来确定特定输入的Foo值。对于任何给定的输入,Foo值在域A或域B中找到(不是在两个域中)。这些领域的搜索技术大不相同,但它们都有一个共同特点,即成功的搜索往往会很快返回,而不成功的搜索必须遍历整个数据集才能穷尽,因此需要很长时间。现在,在其他使用并发的语言(例如Cilk)中,可以对函数Foosearch进行编程,使其生成一个Asearch函数和一个Bse

multithreading - Postgres 锁在不同的 goroutine 上表现不一致

我在go例程和PostgreSQL9.5中遇到了一些与pg_locks不一致的行为。当我创建额外的goroutines并调用SELECTpg_try_advisory_lock(1);时,结果不一致。我可以在某个时刻尝试获取锁,失败,重试并设法获取它,同时没有任何人显式释放锁。我创建了一个小程序来重现该问题。程序流程创建10个协程。他们每个人都试图在初始化时获得相同的锁。每一秒,每个实例都会尝试再次获取锁,如果它还没有获取的话。每一秒我都会探测所有实例并计算有多少已经获得了锁。预期行为:在任何给定时刻,只有1个goroutine会拥有锁。实际结果:设法获取锁的goroutines的数量

go - 如何协调多个 goroutine 的关闭

假设我有一个函数typeFoostruct{}func(a*Foo)Bar(){//someexpensivework-doessomecallstoredis}它在我的应用程序的某个时刻在goroutine中执行。许多这些可能在任何给定点执行。在应用程序终止之前,我想确保所有剩余的goroutines都已完成它们的工作。我可以做这样的事情吗:typeFoostruct{wgsync.WaitGroup}func(a*Foo)Close(){a.wg.Wait()}func(a*Foo)Bar(){a.wg.Add(1)defera.wg.Done()//someexpensivewo