草庐IT

goroutine2

全部标签

实现 Go goroutine 或 Go channel 的 C++ 库?

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。关闭2年前。Improvethisquestion我正在使用目前完全是单线程的中型C++代码库。然而,现在是追求并发性和并行性以提高性能的时候了。我对GoogleGo编程语言的并发模型非常感兴趣,它具有非常轻量级的goroutine和通信channel系统。遗憾的是,出于各种完全正当的原因,该项目需要保留在C++中。所以我的问题是:是否有一个C++库可以近似于Go的并行范式?具体来说,是否有可用于C++的

go - 如何使用 goroutine 池

我想使用Go从YahooFinance下载股票价格电子表格。我将在其自己的goroutine中为每只股票发出一个http请求。我有一个大约2500个符号的列表,但我宁愿一次发出250个请求,而不是并行发出2500个请求。在Java中,我会创建一个线程池并在线程空闲时重用它们。我试图找到类似的东西,一个goroutine池,如果你愿意的话,但找不到任何资源。如果有人能告诉我如何完成手头的任务或为我指出相同的资源,我将不胜感激。谢谢! 最佳答案 我想,最简单的方法是创建250个goroutine并将它们传递给一个channel,您可以使

multithreading - 在 goroutine 中执行 I/O 时,Go 会阻塞当前线程吗?

我对Go如何处理非阻塞I/O感到困惑。Go的API在我看来大多是同步的,在Go上观看演示文稿时,经常听到诸如“和调用block”之类的评论。从文件或网络读取时,Go是否使用阻塞I/O?或者在goroutine中使用时是否有某种魔法可以重写代码?来自C#背景,这感觉非常不直观,因为在C#中,我们在使用异步API时有await关键字,它清楚地表明API可以产生当前线程并稍后在一个继续。TLDR;在goroutine中执行I/O时,Go会阻塞当前线程吗?还是会使用continuation将其转换为类似C#的async/await状态机? 最佳答案

go - 如何创建一个从 goroutine 接收多个返回值的 channel

我在Go中有一个返回两个值的函数。我想将其作为goroutine运行,但我无法弄清楚创建接收两个值的channel的语法。有人能指出我正确的方向吗? 最佳答案 定义一个包含两个值的字段的自定义类型,然后创建该类型的chan。编辑:我还添加了一个使用多个channel而不是自定义类型的示例(位于底部)。我不确定哪个更惯用。例如:typeResultstruct{Field1stringField2int}然后ch:=make(chanResult)使用自定义类型(Playground)channel的示例:packagemainimp

go - 如何在 http goroutines 之间共享 mysql 连接?

我是一个Go菜鸟,找不到任何在Go中打开mysql连接然后在http处理程序之间共享它的完整示例。到目前为止,这是我的代码,我将如何使用我在HomeHandler的main()中打开的数据库连接?packagemainimport("database/sql""fmt"_"github.com/go-sql-driver/mysql""github.com/gorilla/mux""log""net/http")funcmain(){fmt.Println("startingup")db,err:=sql.Open("mysql","root:@/mydb?charset=utf8")

multithreading - Go goroutine 是协程吗?

在GoogleI/O2012演示文稿中GoConcurrencyPatterns,RobPike提到多个goroutines可以存在于一个线程中。这是否意味着它们被实现为coroutines?如果没有,它们是如何实现的?欢迎提供源代码链接。 最佳答案 IMO,协程意味着支持explicit将控制权转移到另一个协程的方法。也就是说,程序员在决定一个协程何时应该暂停执行并将其控制权传递给另一个协程(通过调用它或通过返回/退出(通常称为屈服))时,以某种方式对协程进行编程。Go的“goroutines”是另一回事:它们隐式在gorouti

go - 最大 goroutine 数

我可以无痛使用多少个goroutine?例如维基百科说,在Erlang中可以创建2000万个进程而不会降低性能。更新:我刚刚investigatedingoroutinesperformance一点点,得到了这样的结果:看起来goroutine的生命周期超过了计算sqrt()1000次(对我来说约为45µs),唯一的限制是内存Goroutine需要4-4.5KB 最佳答案 如果一个goroutine被阻塞,除了:内存使用情况垃圾收集速度变慢成本(就内存和实际开始执行goroutine的平均时间而言)是:Go1.6.2(April20

go - 多个 goroutine 在一个 channel 上监听

我有多个goroutines试图同时在同一个channel上接收。似乎最后一个开始在channel上接收的goroutine获得了值。这是语言规范中的某个地方还是未定义的行为?c:=make(chanstring)fori:=0;i输出:goroutine4ExampleOnPlayground编辑:我刚刚意识到这比我想象的要复杂。消息在所有goroutine中传递。c:=make(chanstring)fori:=0;i输出:original,hifrom0,hifrom1,hifrom2,hifrom3,hifrom4注意:上述输出在最新版本的Go中已经过时(见评论)Example

multithreading - 你会如何定义一个 goroutines 池来一次执行?

TL;DR:请转到最后一部分并告诉我您将如何解决此问题。今天早上我开始使用来自Python的Go。我想从Go调用一个闭源可执行文件多次,有一点并发,有不同的命令行参数。我生成的代码运行良好,但我想得到您的意见以改进它。由于我处于早期学习阶段,我还将解释我的工作流程。为了简单起见,这里假设这个“外部闭源程序”是zenity,一个Linux命令行工具,可以从命令行显示图形消息框。从Go调用可执行文件所以,在Go中,我会这样:packagemainimport"os/exec"funcmain(){cmd:=exec.Command("zenity","--info","--text='He

go - 为什么 goroutine 中的 fmt.Println 不打印一行?

我有以下代码:packagemainimport"net"import"fmt"import"bufio"funcmain(){conn,_:=net.Dial("tcp","irc.freenode.net:6667")reader:=bufio.NewReader(conn)gofunc(){str,err:=reader.ReadString('\n')iferr!=nil{//handleitfmt.Println(err)}fmt.Println(str)}()}如果我没有从goroutine中的缓冲区读取的代码,它会输出这样的消息,这是我期望发生的::zelazny.fre