问题标签 [goroutine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
methods - 如何获取并发方法
如何获得并发方法?
我认为方法的所有代码Get()
都应该放在内部go func()
,然后使用通道。
- 如果从 中调用另一个方法会不会有问题
Get()
?或者它也必须是并发的?
go - 在完成时将通道结果添加到队列的更惯用方式
所以,现在,我只是传递一个指向 Queue 对象的指针(实现并不重要),并queue.add(result)
在应该向队列中添加内容的 goroutines 结束时调用。
我需要同样的功能——当然,与简单的队列添加函数调用相比,使用逗号 ok 语法进行循环检查完成在性能方面是不可接受的。
有没有办法更好地做到这一点?
go - 我们如何在 Go 中使用通道来代替互斥锁?
通道将通信(值的交换)与同步相结合,确保两个计算(goroutines)处于已知状态。
如何使用 Google Go 中的通道来执行互斥锁的功能?
haskell - 如何使用 Haskell 模拟 Go 的频道?
我最近开始阅读 Go 编程语言,发现通道变量是一个非常吸引人的概念。是否可以在 Haskell 中模拟相同的概念?也许有一个数据类型Channel a
和一个单子结构来启用可变状态和像关键字一样工作的函数go
。
我在并发编程方面不是很好,像 Haskell 中这样的简单通道传递机制真的会让我的生活更轻松。
编辑
人们要求我澄清我有兴趣将哪种 Go 模式转换为 Haskell。所以 Go 有一流的通道变量,可以通过函数传递和返回。我可以读取和写入这些通道,因此可以在可以同时运行的例程之间轻松通信。Go 还有一个go
关键字,根据语言规范,它作为一个独立的线程同时启动一个函数的执行,并继续执行代码而无需等待。
我感兴趣的确切模式是这样的(Go 的语法很奇怪 - 变量由 varName varType 声明,而不是通常的反转方式 - 但我认为它是可读的):
我的主要兴趣是进行蒙特卡罗模拟,其中我通过尝试修改系统的当前状态并在满足某些标准时接受修改来顺序生成配置。
使用这些通道的东西,我可以编写一个非常简单、可读且小型的蒙特卡罗模拟,该模拟将在我的多核处理器中并行运行,这让我印象深刻。
问题是 Go 有一些限制(特别是,它缺乏我在 Haskell 中习惯的方式的多态性),除此之外,我真的很喜欢 Haskell,不想把它换掉。所以问题是是否有某种方法可以使用一些类似于上面代码的机制来轻松地在 Haskell 中进行并发模拟。
编辑(2,上下文): 我没有学过计算机科学,特别是在并发方面。我只是一个创建简单程序来解决我日常研究程序中的简单问题的人,该学科与 CS 完全无关。我只是觉得 Haskell 的工作方式很有趣,并且喜欢用它来做我的小家务。
我从未听说过单独的 pi-calculus 或 CSP 通道。抱歉,如果这个问题看起来不恰当,这可能是我对此事的巨大无知的错。
你是对的,我应该更具体地说明我想在 Haskell 中复制的 Go 模式,我会尝试将问题编辑得更具体。但不要指望深刻的理论问题。问题是,从我阅读和编码的一些东西来看,Go 似乎有一种巧妙的方式来实现并发(在我的情况下,这只是意味着我的工作让我的所有核心都在数值计算中嗡嗡作响),并且如果我可以在 Haskell 中使用类似的语法,我会很高兴。
go - 如何停止一个 goroutine
我有一个调用方法的 goroutine,并在通道上传递返回值:
我如何停止这样的 goroutine?
go - 我收到的以下 go 代码有什么问题“所有 goroutines 都在睡觉 - 死锁!”
我正在尝试实现此处建议的观察者模式;Go语言中的观察者模式
(上面列出的代码无法编译且不完整)。在这里,是一个完整的编译代码,但我得到了死锁错误。
此外,如果我完全摆脱“退出”,我不会收到任何错误,但它只会打印第一条记录。
sockets - 许多客户端连接到 Go 服务器时的错误
完整代码可以在https://groups.google.com/forum/#!topic/golang-nuts/e1Ir__Dq_gE下载
任何人都可以帮助我将此示例代码改进为零错误吗?我认为这将帮助我们开发一个没有错误的客户端/服务器代码。
我的开发步骤:
- 创建一个可以通过 goroutine 处理多个连接的服务器。
- 构建一个可以使用简单协议正常工作的客户端。
- 扩展客户端以模拟多个客户端(默认使用选项 -n=1000 个客户端)
- TODO:尽量减少服务器的锁
- TODO:尝试使用 bufio 来提高吞吐量
我发现这段代码非常不稳定,包含三个问题:
- 启动 1000 个客户端,其中一个在从服务器读取时发生 EOF。
- 启动 1050 个客户端,很快打开的文件太多(没有打开任何客户端)。
启动 1020 个客户端,出现带有长跟踪堆栈的运行时错误。
/li>
在这里,我粘贴了我更简化的代码。
go - 所有的 goroutine 都在休眠 - 死锁! - - - - 错误
我想编写三个并发的 go 例程,它们相互发送整数。现在,我的代码已正确编译,但是在第一次执行后,它给出了错误“所有 goroutines 都在睡觉 - 死锁!”。我试图找到错误,但我无法在代码逻辑中找到任何错误。任何人都可以帮助我找到我的代码中的错误。我的代码如下。提前致谢。
谁能告诉我为什么如果我将 Routine2 和 Routine3 声明为 goroutine,为什么输出是 [无输出]。我是 GO 的新手,据我从“ http://golang.org/doc/effective_go.html#concurrency ”了解,go 用于在同一地址空间中与其他 goroutine 并行执行 goroutine。那么,问题是什么,所有例程都在运行但输出是[无输出]。
为了使程序更清晰:实际上我很累做的是在每两个例程之间创建两个通道,然后使用一个通道将 int 发送到另一个通道并通过另一个通道从该例程接收 int。例如,例程 1 和 3 之间的通道是命令 13 和响应 13。例程 1 使用 command13 向例程 3 发送 int 和 response13 来接收 int。对于例程 3,response13 用于向例程 1 发送 int,而 command13 用于从例程 1 接收 int(命令/响应 13 代表例程 1 和 3 之间的通道)。现在,由于三个例程是并发的,并且它们具有特定的例程来处理接收到的 msg 或发送 msg,为什么它们会陷入死锁?
go - 抛出所有 goroutines 都睡着了 - 死锁!-------- Google GO 中的错误
我想编写三个并发的 go 例程,它们相互发送整数。现在,我的代码已正确编译,但是在第一次执行后它给出了错误“抛出:所有 goroutines 都处于睡眠状态 - 死锁!”。我试图找到错误,但我无法在代码逻辑中找到任何错误。任何人都可以帮助我找到我的代码中的错误。我的代码如下。
concurrency - Go 编程语言相互并发执行
我有两个并发的 go 例程,如下所示,
是否可以通过使用一些内置函数来实现临界区?