草庐IT

phoenix-channels

全部标签

Golang channel 卡住

我正在使用go和redis将消息队列(channel)发送给订阅者。我的目标是创建一个自动缩放解决方案,随着队列变大,它会产生新的go例程(在一定限度内)。我有以下代码://SetupmaxqueuedmessagesvarmaxMessages=float64(100000)//SetupmaxredissendersvarmaxSender=float64(5)//Setupmessagechannelvarmessages=make(chanMessage,int(maxMessages))//SetupmessagespersendercountvarsenderRatio=m

go - 了解 Go 中的 channel 执行顺序

注意:在这个问题中,我比较了两个版本的代码,并试图理解为什么它们会产生不同的输出。play.golang.org上两个版本的运行示例链接是FIG1和FIG2.我正在处理GoConcurrencyPatternsRobPike在GoogleI/O2012上展示的幻灯片和关于排序的示例有点令人困惑。在Slide29有一个示例说明如何在多路复用之后恢复排序。简而言之,来自多个channel的消息被多路复用到一个channel中,每个消息结构共享一个名为“waitForIt”的channel。此channel旨在确保提供消息的服务(在引用的示例中为boring服务)和服务的客户端按顺序排列。我

go:如何将定向 channel 传递给接受双向 channel 的函数?

你好有一个函数接受chan[]byte(因为没有指定方向,我知道它是双向的)。该函数不发送或接收任何内容,仅出于统计相关目的查看channel中的元素数量。我想在具有以下签名的函数中调用此函数:funcfoo(fooChannelchan但是当我尝试使用参数调用另一个函数时,我得到了错误cannotusefooChannel(type.有什么方法可以将fooChannel转换为chan[]byte?由于我只对获取一些统计信息感兴趣,我应该如何为函数制作原型(prototype)以接受任何类型的channel(这样我什至可以摆脱“字节”部分)?我只使用len和cap以channel作为参

go - 关闭由 channel 链接的 goroutine 链的优雅方法是什么?

我是一名围棋学习者。为了更好地理解channel和goroutine的维护和供给,我正在尝试构建一个SieveofEratosthenes作为一组通过channel连接到管道中的goroutine。这是我目前所拥有的://esieveimplementsaSieveofEratosthenes//asaseriesofchannelsconnectedtogether//bygoroutinespackagemainimport"fmt"funcsieve(mineint,inchchanint){start:=true//First-numberswitchouch:=make(ch

戈朗 : Passing channels through empty interfaces

我正在尝试做一些看似微不足道的事情,直到我仔细阅读,现在看来它应该非常复杂。;-)我敲了一个测试模式来说明:http://play.golang.org/p/Re88vJZvPT在最基本的情况下,我试图拥有一个可以从channel读取数据并将其输出到另一个channel的功能。简单。只要您使用显示的推送器功能,测试就会执行此操作。然而,这样做的问题是,这样做对于我想要推送的每种类型的数据,我都需要一个不同的推送器函数。现在我过去用空接口(interface)做过类似的事情,因为推送代码中没有任何内容关心数据结构中的内容。我无法弄清楚的是,当我处理一个不受关注的数据结构的channel时

golang 中的递归在使用 goroutines、channels 和 sync.Waitgroup 时会产生死锁或负 WaitGroup 计数器

我正在尝试使用递归函数查找所有目录的列表。该函数的代码是funcFindDirs(dirstring,nativePartitions[]int64,wg*sync.WaitGroup,dirlistchanchanstring){//deferwg.Doneherewillgivenegativewaitgrouppanic,commentingitwillgivenegativewaitgroupcounterpanicfd,err:=os.Open(dir)iferr!=nil{panic(err)}filenames,err:=fd.Readdir(0)iferr!=nil{p

Golang channel 维护

我正在使用gochannels作为类似队列的机制,这非常适合我。我正在为每个用户打开这些类似队列的channel之一,并为这些channel中的每一个都有一个for-range循环。唯一的问题是我不会关闭任何这些channel。我想知道Go中是否习惯于在定时器上运行一个go-routine,该定时器基本上会破坏不活动的channel,几乎就像一个“智能”垃圾收集器。如有任何反馈,我们将不胜感激。谢谢。 最佳答案 为channel读写提供超时是一种常见的做法。这是一种安全措施,可确保goroutine在经过给定的时间间隔后停止阻塞。一

go - 将事物的 channel 作为 Go 中的接口(interface) channel 传递

我的程序有一个管道结构,我只是实现了一个缓存过滤器,如果已经处理过的数据版本在缓存中,它会直接将内容发送到输出。funcRun(inchandownloader.ReadyDownload)chanCCFile{out:=make(chanCCFile)processQueue:=make(chandownloader.ReadyDownload)gocache.BypassFilter(in,processQueue,out)//writesthecached,alreadyprocessedversiontooutifitexists//otherwiseredirectsthei

go - channel 只接受一次值 - golang

我刚刚开始使用go。这是我试图通过以下代码实现的目标。Main函数为searchAndLog()创建了5个线程。此函数接受一个channel,通过该channel它将接收到一个目录的路径,它将搜索一个名为“.DS_Store”的文件,然后用它做一些事情。main函数然后为"filepath.Walk()"创建另一个线程。该线程将遍历传递给它的目录,对于它遇到的每个目录(在walkFunc()中),它将执行select语句,将目录路径传递给5个线程之一。但是当我运行这个程序时,"filepath.Walk()"遇到的前五个目录将它传递给五个线程,但是一旦它把一个目录传递给每个线程一次,它

go - 我如何使用 channel 来知道循环启动的所有 goroutines 何时完成

我目前正在尝试range在map执行并发数据库请求而不是同步请求,显然是因为速度提升。我的问题是我有这样的事情:varmainthreads=make(chan*mainthread)varmainthreadsFetched=make(chanstruct{})forcontainerid:=rangecontainers{gofunc(){rows,err:=db.Query("SELECTthread_id,belongs_to,thread_name,access_levelFROMforum_mainthreadWHEREbelongs_to=?",containerid)d