草庐IT

异步FIFO

全部标签

unit-testing - 如何确保所有异步函数在执行 defer 之前运行

我有一个函数说Myfunction(){x.RunAsync()//AsyncFunctioncall}我必须为Myfunction()编写一个测试用例。我正在为此使用go-mock。还有mockedx。Test_MyFunction(){mockCtrl:=gomock.NewController(t)defermockCtrl.Finish()//EXPECT()calltostubRunAsync()}现在的问题是我的测试运行成功,但不知何故最后它panic地说,对mockX.RunAsync()的调用丢失了。我认为这是因为在我的RunAsync被stub之前正在执行延迟。如何确

go - 域事件的可靠异步处理

在并发系统中,域事件通常是异步处理的。在Go中,可以通过channels实现一种简单的异步事件处理方法,但问题是如果处理事件发生了一些不好的事情,或者更糟糕的是,对于整个程序来说,事件将会丢失.如何在Go程序中正确处理异步领域事件,即:当事件处理程序失败时,不应从事件队列中清除该事件,以便稍后妥善处理。如果整个程序宕机,则必须恢复事件并进行相应处理。 最佳答案 第一个相对容易;您可以在worker中有一个错误处理程序,在发生错误时将工作重新排队。第二个更难;你的选择是a)推出你自己的防弹机制,将事件写入磁盘并在它们以线程安全的方式完

performance - Go 中异步 TCP 服务器的正确结构是什么?

我有一个客户端发送大约50万个请求(消息)/分钟。每条消息大约为200字节到2KB。每条消息都将保存在数据库中(例如Couchbase)。根据核心、端口、连接和goroutines来构建GoTCP服务器以处理此负载的正确方法是什么? 最佳答案 正如JimB所提到的,TCP服务器应该不难建立并开始针对您的需求进行基准测试。一个简单的布局是等待传入的TCP连接,然后执行一个go例程来处理它。在那个goroutine中,你可以放置任何你想要的阻塞代码,在本例中是写入数据库。这是一个简单示例的链接:Simpleexample一旦你开始工作,

go - 异步文件写入 Golang 中的 http.HandleFunc

我刚刚开始学习围棋。我正在编写一个小型服务器应用程序,处理请求的函数(方法)(通过http.HandleFunc)写入一个文件——总是同一个文件。因为,据我所知,http.HandleFunc为每个请求启动一个新的goroutine,我担心文件写入可能最终会以某种方式相互干扰-通过相互阻塞或只是重叠。从实际输出来看,到目前为止还没有出现这个问题,但会不会出现,如果会出现,我该如何解决?这是我的代码的清理版本:packagemainimport("os""net/http")typeServicestruct{file*os.File}func(ser*Service)handleReq

golang fifo缓冲 channel

根据我的理解:当channel已满时,GO中的缓冲channel不是FIFO。我的应用程序需要这种行为(FIFO行为)。我怎样才能实现这种行为?是否有任何开源?提前致谢编辑:有些人不喜欢这个问题,所以让我更清楚一点:我的意思是当缓冲channel已满并且多个发件人被阻止时在尝试将项目添加到channel时,它们的发布顺序不是先进先出。您还可以阅读此讨论:https://github.com/golang/go/issues/11506是的,我正在寻找实现该行为的第三方库。抱歉没说清楚。 最佳答案 Go中的缓冲channel始终是FI

asynchronous - 具有异步 goroutines 的 Kafka 消费者

我正在为我的消费者使用sarama(https://github.com/Shopify/sarama/)和Kafka0.8.0。这是我的代码的样子:consumerLoop:for{select{caseevent:=我正在使用缓冲channel(c.sem)来控制一次可以运行多少个processJobgoroutine。这就是我控制消费者的并发/速度的方式。我在使用这种方法时遇到的问题是,如果我需要更改并发性,我必须关闭使用者并重新启动它(channel缓冲区大小是一个命令行标志)。我记录了已处理的偏移量,我必须查看我的日志以确定处理了哪些偏移量以及我希望消费者从哪里恢复。我想要一

c# - 您将如何使用 Scala 的异步使多个异步请求超时?

我不了解Scala,但我很好奇它的异步功能(类似于C#的)。您将如何将此go代码转换为Scalaasync?http://talks.golang.org/2012/concurrency.slide#47c:=make(chanResult)gofunc(){c 最佳答案 这是如何完成的草图(未经测试;我不声称这是最佳解决方案)://IassumethattheWeb/Image/VideofunctionsreturninstancesofFuture[Result]valf1=Web(query)valf2=Image(que

multithreading - 半异步代码逻辑

我正在努力找出一种可行的设计,将同步流与异步行为混合在一起。我有4个组件:播种者worker出版商更新者我唯一的限制是,一旦Seeder播种数据,它必须被阻止,直到Updater没有完全完成所有任务的处理。前3个组件可以很容易地同步,但更新程序必须并行工作,否则将永远无法完成任务。所以流程是:播种机->worker->发布者->更新者-->播种者->worker->发布者->更新者...并且这个流必须永远旋转。播种和更新是针对数据库的。不幸的是,这个特定的数据库不允许不同的设计。我最好的办法是使用sync.WaitGroup来同步Updatergoroutines并将其他所有内容保持在

asynchronous - 多个函数的数据处理是异步的

我有通过http接收的数据,这些数据需要由两个不同的函数处理。重要的是它们由每个函数按顺序处理。在文件中,例如:1,2,3,4,5。而数据库也记录了1,2,3,4,5。作为fifo模型。现在我有这样一个问题......我的数据一直在运行,有时数据库可以满足我更新数据的要求很长时间,因此我无法及时更新文件。在可能的情况下将数据添加到文件或数据库对我来说很重要。我可以使用缓冲channel,但我不知道队列中有多少数据可以等待处理,我不想表明缓冲区的大小肯定很大。我尝试向NewData函数添​​加更多goroutine,但在那种情况下,我的数据不是按顺序写入的。此代码显示了问题。packag

c# - 如何作为共享库异步返回函数的进度

所以我想使用下面的方法在golang中创建一个下载文件的函数,我使用将这个golang项目构建到C.dll中gobuild-buildmode=c-shared-opatcher.dllmain.go我设法在我的C#应用程序上使用此函数来获取文件下载进度,如果我只是使用DownloadFile()直接打印它,我当前的函数(DownloadFfile)就可以工作,但是我想在我的C#应用程序上异步获取进度,但我无法直接获取值,所以我想我需要从我的golang应用程序返回进度的整数,但如果我这样做,该函数只执行1次(进度的最后结果)问题是如何让我的gofuncDownloadFile在我的C