问题标签 [crossbeam]

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 投票
1 回答
103 浏览

pointers - crossbeam_epoch::Shared::as_raw “将指针转换为原始指针(不带标签)”是什么意思?

有人可以将翻译成对我有意义的东西:

将指针转换为原始指针(不带标记)。

  1. 指针和原始指针有什么区别?

    Stack Overflow原始指针标签既没有说“智能”也没有说“共享”,这又是一个谜。

  2. Crossbeam 的Shared::as_raw“标签”到底是什么?

0 投票
0 回答
216 浏览

rust - 我很难理解如何使用横梁双端队列实现任务调度程序

我遇到的问题是生命周期管理。我有一个注入器,我在工作线程之间共享它。我不得不使用Arc<>as&导致终生抱怨。本地队列不共享,所以不用担心。然后我们来到偷窃者。

从文档中,可以跨线程共享窃取。因此,4 个线程,每个线程都有一个 worker,每个线程都有 3 个窃取者。但是,我再次遇到了生命周期问题,这些问题似乎表明self线程何时产生。示例任务选择器表明窃取者可以表示为窃取者的切片,我最终得到的是对窃取者的引用切片。

也许我误解了文档,我应该使用Arc-style 引用计数来管理注入器和窃取器的生命周期。有人可以为我澄清一下吗?

这是一个包含 3 个线程的池的简化(排序)。我已经删除了围绕线程窃取器和注入器的生命周期管理,因为它们可能是或者Arc其他<'a>的。

0 投票
0 回答
119 浏览

rust - 在 Rust 中,我有大量我想管理的接收器对象,但是我在使用 Select 时遇到了生命周期问题

由于存在大量对象的可能性,我想有一种方法将它们添加到选择列表中,删除它们进行处理,然后将它们添加回来。全部,无需在每次将对象添加回来等待时重新构建选择列表。它看起来像这样:

随着时间的推移,选择列表将包含更多的死条目,然后是活的,我会在那个时候重建它。但是,我不想每次都重建它。这是详细的错误消息:

虽然我相信我理解这个问题,从哈希表中借用接收器的时间不够长,但我很难想出一个替代方案——而且我没有看到一个干净的方法借资料。我考虑创建一个结构来包含借用,并在等待 sel_index 中使用它而不是普通的 id,但这会遇到相同的生命周期问题。

我觉得我错过了一些东西或不理解一些东西,因为看起来做我想做的事情不应该那么难。我可以想象选择 HashMap 来保存对象可能是问题所在,因为我正在添加和插入,所以 Vec 感觉不对。顺便说一句,HashMap 通常不属于候补名单。它是其他东西的一部分,但无论 HashMap 位于何处,问题仍然存在。

0 投票
1 回答
242 浏览

multithreading - 发送时不阻塞的横梁零容量通道

我需要 Crossbeam 的零容量通道的一个变体,如果没有接收操作crossbeam_channel::bounded(0),它不会阻塞。send()在我的情况下,可以丢弃在没有正在进行的接收操作时发送的消息。接收者将在开始侦听后接收所有发送的消息。这类似于 Redis 通道发生的情况,但在线程之间。

类似的东西已经存在还是我需要自己实现?目前我不清楚如何实现这样的功能,但我可能可以从查看有界零容量通道的实现开始,并可能用非阻塞版本替换阻塞发送操作。

0 投票
1 回答
920 浏览

asynchronous - 为什么 tokio::spawn 在 crossbeam_channel::select 旁边调用时会有延迟?

我正在创建一个将产生其他任务的任务。其中一些需要一些时间,因此无法等待,但可以并行运行:

src/main.rs

我注意到奇怪的行为。这输出:

我期待它也能输出inner task 0

如果我向通道发送一个值,输出将是:

这是缺失的inner task 1

为什么会inner task产生一个延迟循环?

我第一次注意到“从通道任务接收”的这种行为延迟了一个循环,但是当我减少代码以准备样本时,这种情况开始发生在“内部任务”中。值得一提的是,如果我写第二个tokio::spawn权利给另一个,只有最后一个会有这个问题。tokio::spawn打电话时我应该注意什么select!?是什么导致这一循环延迟?

Cargo.toml 依赖项

生锈 1.46,Windows 10

0 投票
1 回答
130 浏览

matrix - 并行更改二维向量

crossbeam_utils我正在尝试使用version在二维向量(图形)的每个位置设置值 1 0.8.0。每个线程接收的子矩阵是不相交的。我cargo run在 Windows 上运行代码。我的代码基于这些question1question2。但是,我收到以下错误:

但是,如果我在产生的线程中注释命令(*slice)[row][col] = 1,我可以看到线程在控制台中打印的那样完美。

是什么导致了这个错误?

0 投票
1 回答
74 浏览

rust - 如何在rust中返回带有引用的结构?

我正在使用crossbeam-epochrust 编写无锁数据结构。crossbeam-epoch使用 aguard加载堆分配的原子指针。数据结构接口的一个示例是:

此方法需要guard与返回值的引用具有相同生命周期的 a。

现在,我想在不提供Guard. 例如:

但是编译器不允许我这样做。

我的问题是如何实现该方法my_get

0 投票
3 回答
416 浏览

rust - 混合选择!Rust 中的异步调用

我正在构建一个小应用程序,它应该以rusoto不同的时间间隔安排两个任务(基于 AWS SDK):每 X 秒运行一个任务,每 Y 秒运行另一个。

我找到crossbeam了提供滴答计时器和select!宏的板条箱,并将它们放在一起,如下所示:

这会编译,但是程序会出现thread 'main' panicked at 'not currently running on the Tokio runtime.'. 通过分析回溯,这似乎来自 Rusoto 调用。

我在这里想念什么?有没有办法使这项工作?有没有更好的方法来处理 Rust 中的任务调度?

请注意,这个问题似乎没有解决我的问题。这个问题从使用futures::executor::block_on函数开始,然后通过使用block_ontokio 实现的方法来解决Runtime。我已经在使用中的block_on方法了Runtime

0 投票
0 回答
83 浏览

select - 如何从通道 vec 中选择一个?

我想从频道中选择一个频道来发送/接收数据,该怎么做?

以下来自 crossbeam lib 的演示代码不符合我的要求,因为我想从通道 vec 中获取一个,不是文字表达。

0 投票
1 回答
61 浏览

multithreading - 在循环中借用 mutable

我尝试处理具有多个工作线程的数组,就像 Rayon 的par_iter()函数一样,但我想要一个可变引用target,每个线程一个。

我有一个像这样的简单功能

出于某种原因,我不断收到错误

但是当我在 rust 操场上尝试它时,它编译没有问题 https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0a10cbfd2f135975f4682c843664d539 这里有什么问题?代码对我来说看起来很安全。