问题标签 [channels]

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 投票
4 回答
29652 浏览

go - 如何显式清空频道?

简短版本:有没有办法在不重新创建或循环遍历的情况下清空 go 通道?

原因:我使用两个通道来发送和接收数据,并且我有一个额外的通道来表示需要重新连接。

现在,当传输已重置/重新连接时,我想“清空”额外的通道以确保没有任何挥之不去的其他重置请求会导致事物再次重新连接。

0 投票
1 回答
182 浏览

antlr4 - Antlr4 通道行为

我有以下构造:

执行此模式时,END_LITERAL 会预先附加所有 PASS_THROUGH_CHAR。我会认为所有的 PASS_THROUGH_CHAR 都在 TEXT 频道上,而 END_LITERAL 只是'{/literal}

这种行为正确吗?

0 投票
1 回答
73 浏览

arrays - 编译器错误

在阅读了 GOLANG-BOOK 之后,我开始使用 golang。我正在尝试构建一个简单的 TCP 聊天。我创建了一个用户结构,我想从 users 数组中监听每个 user.inbound 频道。

我知道我的问题在于函数 writeUser(),因为它正在等待 user.inbound。我不确定如何正确地与一系列用户进行这种通道。

这是我从编译器收到的错误:

  • 第 22 行是函数 writeUser()

这是我的代码:

0 投票
2 回答
1453 浏览

jboss - JBoss 返回 org.jboss.remoting.ProtocolException:打开的频道太多

我的程序遇到错误:

“org.jboss.remoting3.ProtocolException:打开的频道太多”

我从互联网上搜索了一些解决方案来解决这个错误。不幸的是,其他人的建议对我不起作用。

下面是关于我如何调用 jndi 遥控器和我使用的属性的代码。

由于某种原因,我无法显示该方法的所有内容。

每次需要创建新用户时都会调用“createUser”。它将被调用数百或数千次。

每次完成执行该方法时,我总是关闭连接。

假设我已经调用了该方法 100 次,一些用户将成功创建,而一些用户将失败。

下面的错误会提示我:

一旦发生错误,它需要我重新启动我的 jboss。有时它会再次出现。

如果有人能够帮助解决我面临的问题,我将不胜感激。

谢谢

0 投票
1 回答
5482 浏览

antlr4 - antlr 4.5 中的额外频道

我正在使用 antlr 4.5 为具有几种特殊注释格式的语言构建解析器,我想将其流式传输到不同的频道。

似乎 antlr 4.5 已经扩展了一个新的结构来声明额外的词法分析器通道:

从文档https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Lexer+Rules中提取

从 4.5 开始,您还可以在词法分析器规则上方使用以下构造定义通道名称,例如枚举:

频道 { WSCHANNEL, MYHIDDEN }

我的词法和解析规则在一个文件中,我的代码如下所示:

...解析规则...

但是我仍然收到类似 4.4 的错误

如果我将词法分析器和解析器拆分为两个不同的文件并使用导入语句将词法分析器导入解析器中,我仍然会遇到与上述相同的错误,

使用整数常量而不是名称与组合语法

产生以下错误

如果我将词法分析器和解析器分成两个文件并使用整数常量没有警告,但是它的可读性并不令人满意。

我可以做些什么来正确命名额外的频道吗?(使用组合或单独的词法分析器/解析器规范,无偏好)

问候,

0 投票
2 回答
150 浏览

multithreading - 使用多个通道与单个共享结构进行通信是否是线程安全的?

考虑以下代码:

在这段代码中,创建了一个缓存,并在一个单独的 goroutine 上调用了 Run 函数。

如果要缓存响应,则通过缓存的AddChannel;发送。

如果要删除响应,则通过RemoveChannel

如果需要找到响应,则通过FindChannel.

这是一种保护缓存免受竞争条件影响的线程安全方式,还是有可能,例如,相同的响应可以发送到两者AddChannelRemoveChannel导致缓存损坏。

我已经阅读了 Go 的内存模型文档并了解可以保证在接收之前通过通道发送变量,但如果有多个通道与单个实例通信,我有点困惑这是否仍然成立。

对不起,如果我的问题措辞不好,感谢您的帮助。

0 投票
2 回答
838 浏览

clojure - 使用 core.async pub/sub 时如何避免丢弃项目?

我有一个作为发布者的频道:

由于 的性质sub/pub,当我这样做时:

消息被发布使用,并且由于没有订阅者,它将被丢弃。

如果我尝试订阅该:foo主题:

我不会看到任何印刷品。但是,如果我在发布者中放置更多项目:

即使订阅者尚未订阅,有没有办法不丢失n发布者生成的最后一个项目?

0 投票
1 回答
324 浏览

go - 在尝试发送之前进行非阻塞通道发送,测试失败?

有没有办法在不实际尝试发送的情况下测试 go 通道发送失败?标准的非阻塞发送是这样的:

问题是我需要准备好发送“msg”才能测试通道。

我想测试一下发送是否会以不需要“msg”准备发送的方式失败。

0 投票
2 回答
487 浏览

concurrency - 在 Go 通道中对发送者进行排序

考虑来自http://www.golang-book.com/10/index.htm#section2的乒乓球示例。

作者写道:

“该程序现在将轮流打印乒乓球。”

但是,要做到这一点,Go 必须决定发送者可以发送到通道的顺序吗?否则,将无法保证 ping 会在 pong 之前发送(即您无法获得两个 ping 或连续两个 pong)。这是如何运作的?

0 投票
1 回答
8413 浏览

go - 使用多个 goroutine 写入同一通道

这段代码可以正常工作,我的问题是为什么。我了解到,在阻塞之前,您只能将一个值发送到无缓冲通道。但是在我的代码中,我写了两次,但是来自不同的 go 例程,它可以工作。如果有人可以向我解释原因,将不胜感激!