草庐IT

Concurrency

全部标签

go - 了解无缓冲 channel 示例

officialcodeexamplefuncsum(s[]int,cchanint){sum:=0for_,v:=ranges{sum+=v}c打印:-5、17、12为什么不打印17,-5,12?我认为x应该是17 最佳答案 没有定义哪个值先写入channel的顺序,这完全取决于调度程序。由于所有示例所做的都是将结果相加,因此结果出现的方式实际上并不重要。 关于go-了解无缓冲channel示例,我们在StackOverflow上找到一个类似的问题: htt

go - 取消用户特定的 goroutines

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭4年前。Improvethisquestion我有一个应用程序(网络应用程序)让用户使用Twitteroauth登录并提供自动删除推文的功能。在用户登录到网络应用程序后,我将为每个将删除用户推文列表的用户启动一个goroutines(通过RESTapi)。假设有100个用户,每个用户有500+条推文:如何在删除过程中停止删除go例程。例如:用户30在启动删除过程2分钟后请求停止删除推文(这应该通过对我的应用程序的API调用来完成)。在考虑http请求

go - 当 channel 关闭时,以接收 channel 作为参数的 goroutines 是否停止?

一直在看《用go构建微服务》,书中介绍了apache/go-resiliency/deadline用于处理超时的包。deadline.go//Packagedeadlineimplementsthedeadline(alsoknownas"timeout")resiliencypatternforGo.packagedeadlineimport("errors""time")//ErrTimedOutistheerrorreturnedfromRunwhenthedeadlineexpires.varErrTimedOut=errors.New("timedoutwaitingforf

multithreading - 具有高并发执行的 Golang http.Client 中的 panic

我正在创建一个系统,它是一个golang中的http服务器,它将根据收到的每个请求向另一个API执行多个请求。例如curllocalhost:8080/users?ids=1,2,3,4将执行多个并发获取:api.com/user/1api.com/user/2api.com/user/3api.com/user/4我遇到了一个问题,当http.Client有大量并发请求时(如果我点击localhost:8080/users?ids=1,2,3,4.....40AB4并发,或在我的浏览器中点击刷新)问题似乎与句子有关(第159行)resp,_:=client.Do(req)我的代码在这

concurrency - sync.WaitGroup 不等待

可能是我看不到明显的东西,我做错了什么:funcprintSize(listOfUrls[]string){varwgsync.WaitGroupwg.Add(len(listOfUrl))for_,myurl:=range(listOfUrls){gofunc(){body:=getUrlBody(myurl)fmt.Println(len(body))wg.Done()}()}wg.Wait()}如果我删除wg并继续,我会正确收到每个url正文的大小。如果我像上面那样做,它几乎会立即打印出零。getUrlBody()有时需要几分钟才能执行。回答评论:可以肯定的是,我也以这种方式尝试

windows - 可以不 Hook 所有可用的 CPU 电源吗?

我知道,大多数go的初学者都会问如何拥有可执行的go-routines/concurrency,这一点我几周前就通过了。:-)我有一个真正快速的转码器,它使用我的4+4(i7HT)CPU的每个可用周期。它将文件读入一片指向结构的指针,对这些进行计算并将结果写回磁盘。我正在使用bufio。我来自VB,所以Go的性能令人难以置信。我尝试添加最少的sleep(通过time.Sleep()),但这大大降低了性能。虽然我的转码器正在工作,但整个系统都滞后了。我必须将go任务的优先级更改为低或空闲才能再次工作。我怎样才能实现让系统保持响应的东西?现在我启动了数千个go-routines(在一片指针

go - 为什么 sync.WaitGroup、sync.Mutex 不引用 channel 、 slice 等类型?

如果Waitgroups和Mutex总是需要通过引用传递,我们不能把它做成引用类型(禁止使用它们作为值传递)吗?我的意思是有没有我们需要使用它们按值传递的用例? 最佳答案 当您将任何参数作为值传递时,该值将被复制。这些参数的任何修改都将在func中进行。当func退出时,这些更改将消失。在WaitGroup或Mutex的情况下你不想要这个,因为你想共享状态。如果所有修改都是本地的,您将无法同步任何内容,因为您将拥有许多具有不同状态的不同副本。一个有效的情况可能是您想要复制一个WaitGroup或Mutex,但那将是非常隐含的代码并且

api - 如何在每个例程调用 api 的情况下并行运行 10000 个 goroutines?

我有以下代码,我在其中尝试调用api10000次但出现错误:packagemainimport("fmt""net/http""runtime""sync""time")funcmain(){nCPU:=runtime.NumCPU()runtime.GOMAXPROCS(nCPU)varwgsync.WaitGrouptotalRequests:=100000wg.Add(totalRequests)fmt.Println("StartingGoRoutines")start:=time.Now()total:=0fori:=0;i我得到的错误:Gethttp://127.0.0.1

multithreading - Go-尝试创建超过一定数量的goroutine时出现段错误问题

我试图在go中对http客户端进行压力测试。一开始,我只是尝试运行10个并发请求10次迭代。这是我的客户代码://stress.gopackagemainimport("fmt""io/ioutil""net/http""time")funcMakeRequest(urlstring,chchan对于迭代和goroutine的这种组合,它工作得很好。但是,当goroutine和迭代次数超过某个级别时,在我的例子中,对于单个迭代,当goroutine的次数超过634时,我收到这个错误:panic:runtimeerror:invalidmemoryaddressornilpointerd

function - 如何将 time.Duration 类型传递给 go 函数?

我正在学习GOLANG,尤其是它的并发能力。已尝试进一步开发worker_pool示例之一,以便每个工作人员都收到一个作业ID和一个作业负载,以作业的随机持续时间表示。time.sleep命令使用持续时间来等待分配的纳秒数,这是随机计算的。代码看起来像这样......//worker_poolimprovedexamplepackagemainimport"fmt"import"time"import"math/rand"//Here'stheworker,ofwhichwe'llrunseveral//concurrentinstances.Theseworkerswillrecei