问题标签 [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.

0 投票
3 回答
897 浏览

go - 为什么这个程序中有竞争条件?

我正在查看 Golang 文档中的典型数据竞争,我不太明白为什么这个程序会出现问题:

5, 5, 5, 5, 5会在我期望它打印时打印0, 1, 2, 3, 4(不一定按此顺序)。

在我看来,当 goroutine 在循环内创建时,值i是已知的(例如,可以log.Println(i)在循环开始时执行 a 并查看预期值)。所以我希望 goroutine 能够捕获i它创建时的值并在以后使用它。

显然这不是正在发生的事情,但为什么呢?

0 投票
1 回答
104 浏览

multithreading - 如何在不等待的情况下从通道获取值

在 Go 中,如果我尝试从通道接收,程序的执行将停止,直到通道中有某个值。但是,我想做的是让程序继续执行,如果通道中有值,则对其进行操作。

我想到的伪代码是这样的:

据我了解,我不能简单地使用v <- mychan,因为这会阻止程序执行,直到有值可用。在 Go 中执行此操作的方法是什么?

0 投票
2 回答
210 浏览

go - 奇怪的 Goroutines 行为

如果我错了,请纠正我。据我所知,goroutine 的工作方式与线程大致相似。因此,如果我使用 go 前缀生成具有不同参数的相同函数。它应该工作得很好?

实际输出:

我只是得到提示。

预期输出:

不一定是同一个顺序。
无法理解这种奇怪的行为。我错过了什么吗?

编辑:添加 Scan 语句可以解决它。但是有没有更好的方法呢?

0 投票
3 回答
104 浏览

go - 有什么方法可以检查值是否在 Go chan 中缓冲?

我怎样才能做类似以下的事情?:

基本上,我想检查 chan 中是否有缓冲值,如果没有,我可以在线程被阻塞之前发送更新消息。

0 投票
1 回答
1115 浏览

go - 如何从堆栈上的任何位置退出 goroutine(从内部)?

例如:

如何直接从foo()or退出 goroutine bar()?我在想也许使用panicand recover,但我不确定它们是如何工作的。(使用传统的异常处理,我只需将 的主体包装goroutine()在一个try块中,并在我想退出时抛出异常。)

编辑:如果我用过panic,我什至需要recover()吗?

0 投票
2 回答
3142 浏览

go - 去常规阻止其他人

以下代码永远运行,而不是在开始后一秒钟停止。带有无限循环的 go 例程似乎阻止了另一个发送到超时通道。这正常吗?

0 投票
1 回答
904 浏览

go - 使用 goroutine 的正确方法是什么?

我需要对每个请求应用一些测试,并根据测试结果触发响应。如果其中一项测试失败,我需要立即发送响应,否则我将等待所有测试成功完成。我想用并发进行测试。

现在,我这样做(简化):


goroutine 之一的示例:

问题是 goroutine 在我退出信号后不会释放内存。我想这是因为完成的香奈儿有一些东西。我是 GO 的新手,所以也许我用错了?

例如,当我开始负载检查时http_load -parallel 10 -seconds 10,该 goroutine 很容易吃掉 100+ MB 的 RAM,并且不会将其还给系统。在下一次检查时,它会多吃 100+ MB,依此类推。

如果我在没有go(逐步)的情况下进行测试,则程序在进行任何负载检查时占用的空间不超过 10-15mb。

0 投票
1 回答
153 浏览

concurrency - How is this chan leaked?

I'm trying to understand the problem outlined on this slide:

http://talks.golang.org/2013/bestpractices.slide#27

Copying the code in case the URL dies:

And the comments:

  • the goroutine is blocked on the chan write
  • the goroutine holds a reference to the chan
  • the chan will never be garbage collected

I'm not sure I understand why the chan never gets collected or which goroutine is keeping a reference to the chan. Your time is appreciated!

0 投票
2 回答
359 浏览

go - Goroutines 破坏了程序

问题是这样的:有一个 Web 服务器。我认为在页面加载中使用 goroutine 会很有好处,所以我继续做了:调用 loadPage 函数作为 goroutine。但是,执行此操作时,服务器会停止工作而不会出现错误。它打印一个空白的白页。问题必须出在函数本身——某些东西与 goroutine 有某种冲突。

这些是相关的功能:

0 投票
4 回答
37608 浏览

multithreading - Go goroutine 是协程吗?

在 Google I/O 2012 演示Go Concurrency Patterns中,Rob Pike 提到多个goroutine可以存在于一个线程中。这是否意味着它们被实现为协程?如果没有,它们是如何实施的?欢迎提供源代码链接。