jjzjj

goroutine

全部标签

python - 与 Python 等其他语言相比,golang 中的 WaitGroup 是退步了吗?

我是golang的新手,我正在尝试goroutine,虽然并发运行事情很容易,但我对golang使用WaitGroup“加入线程”的方式感到有点惊讶。据我所知,goroutine需要引用WaitGroup对象才能调用Done(),这意味着,我必须让goroutine接受WaitGroup对象,或者使WaitGroup对象成为goroutine的全局对象。但在Python等其他语言中,您调用thread.join(),“控制”部分位于线程代码之外。就像我说的,我对golang很陌生,我不知道为什么它是这样设计的,有人可以在这方面阐明一下吗?更新:我希望争论不是基于“Goroutinevs

go - 是否可以按输入顺序收集 goroutine 结果?

这个问题在这里已经有了答案:HowtocollectvaluesfromNgoroutinesexecutedinaspecificorder?(2个答案)关闭5年前。我认为我的结果顺序应该与输入相同,是否可以在goroutine中使用?我是这样实现的:packagemainimport"fmt"import"time"funcworker(idint,jobs运行它here

linux - 无法在 Linux 上的 goroutine 中运行 go web serve (Mint)

我正在尝试在我的go应用程序中启动一个网络服务器。当我在Windows上运行我的代码时,一切都按预期工作。应用程序运行它启动web服务器,然后等待。在Linux上,它似乎做同样的事情,只是我无法访问Web服务器。如果我在不使用goroutine的情况下启动Web服务器,服务器会正​​常工作,只有当我使用goroutine时它​​才会失败。packagemainimport("fmt""log""net/http")funcmain(){//gostartWebServer()//ThisonlyworksonWindows.//startWebServer()//Thisworkson

multithreading - 自同步 Goroutines 以死锁告终

我有一个压力测试问题,想通过Go中的简单同步来解决。到目前为止,我已经尝试查找关于我在Go中同步的特定用例的文档,但没有找到合适的文档。更具体一点:我必须完成一项任务,我必须在主例程中启动大量线程(在此示例中仅使用两个线程进行说明)。所有被启动的worker都应该以无序的方式自己准备一些初始化Action。直到它们到达一个小的命令序列,我希望所有的goroutines一次执行它们,这就是为什么我想要让goroutines相互同步。对我的任务来说非常重要的是,通过实例化所有其他goroutine的主例程的延迟不会影响工作人员执行的真正并行性(在注释中的标签#maximumparallel

io - 中止来自另一个 goroutine 的 Read() 调用

我在IMAP服务器上工作,其中一项操作是升级连接以使用TLS(通过STARTTLS命令)。我们当前的架构有一个goroutine从套接字读取数据,解析命令,然后通过channel发送逻辑命令。另一个goroutine从该channel读取并执行命令。这在一般情况下效果很好。但是,在执行STARTTLS时,我们需要停止当前正在进行的Read()调用,否则Read()将使用来自TLS握手的字节。我们可以在两者之间插入另一个类,但是那个类将在Read()调用中被阻塞,我们遇到了同样的问题。如果网络连接是一个channel,我们可以添加另一个信号channel并使用select{}block来

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

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

go - 如何响应 http 并保持 goroutine 运行?走

我想知道是否可以使用stdhttp来响应http请求打包并仍然保持go例程事件(例如运行任务密集型任务)。用例是我需要接收一个http请求,然后在几分钟后回调该服务 最佳答案 只需从您的处理程序中生成一个新的goroutine并让其保持事件状态,只要您愿意。 关于go-如何响应http并保持goroutine运行?走,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/25213769

go - 在 goroutine 中发送电子邮件

我正在尝试使用golang编写身份验证系统。用户注册成功后,会向用户发送确认邮件。我想在goroutine中执行发送邮件功能。发送邮件功能的代码如下所示funcSend(email,linkstring)error{//ConnecttotheremoteSMTPserver.c,err:=smtp.Dial("127.0.0.1:2525")iferr!=nil{returnerr}//Setthesenderandrecipient.c.Mail("sender@example.org")c.Rcpt(email)//Sendtheemailbody.wc,err:=c.Data(

go - 坚持 Go 并发

我似乎不知道下一步该做什么。我的目标是使用图像包中的SubImage函数从原始图像创建一个包含所有子图像的数组。我能够在imageSplit()函数中分割图像并通过channel传递给imageReceiver()函数。我实际上在函数imageReceiver()中接收数据,但我不知道如何在从imageSplit()函数接收到所有图像后附加到数组并使用它。//PartitionsImagefuncPartition(srcimage.Image)[]image.Image{newImg:=image.NewNRGBA64(src.Bounds())r:=newImg.Rectdx,dy

Goroutines 不能并行工作

给定以下代码:packagemainimport("fmt""runtime""time")funcf(fromstring){fori:=0;i大多数情况下的输出是:iamnotparallel:0iamnotparallel:1iamnotparallel:2neitherme:0neitherme:1neitherme:2有时:neitherme:0neitherme:1neitherme:2iamnotparallel:0iamnotparallel:1iamnotparallel:2当runtime.Gosched()取消注释时,一切似乎都正常。我尝试将GOMAXPROCS数