问题标签 [phaser]

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 投票
0 回答
168 浏览

java - Phaser synchronizer example in Java

I've just read javadocs about phaser and now it's reasonobly to ask about whether the barrier implementation is applied in JDK itself (I consider JDK7). As the Phaser JavaDoc stated

Phasers may also be used by tasks executing in a ForkJoinPool

So, I looked up Phaser's usages in the ForkJoinPool but I couldn't find anything. The goal is to find any real example using Phaser.

0 投票
1 回答
561 浏览

java - ForkJoinPool、Phaser 和托管阻塞:它们在多大程度上对抗死锁?

这个小代码片段永远不会在 jdk8u45 上完成,并且曾经在 jdk8u20 上正确完成:

Phaser的文档指出

在 ForkJoinPool 中执行的任务也可以使用 Phasers,这将确保在其他人被阻塞等待阶段推进时执行任务有足够的并行性。

但是ForkjoinPool#mangedBlock 的 javadoc指出:

如果在 ForkJoinPool 中运行,可能会首先扩展池以确保足够的并行度

那里只有一个可能。所以我不确定这是否是一个错误,或者只是不依赖 Phaser/ForkJoinPool 合约的错误代码:Phaser/ForkJoinPool 组合的合约有多难防止死锁?


我的配置:

  1. Linux adc 3.14.27-100.fc19.x86_64 #1 SMP 2014 年 12 月 17 日星期三 19:36:34 UTC x86_64 x86_64 x86_64 GNU/Linux
  2. 8核i7
0 投票
3 回答
2993 浏览

java-8 - 用一个例子理解java中的phaser

我正在尝试理解 Java 中的 Phaser。我写了一个例子,它提前卡住等待其他方到达。

据我了解,移相器用作可重用的线程同步(与不可重用的 CountdownLatch 不同)屏障与屏障动作(与用于共享状态的 Cyclicbarrier 不同,Phaser 不必在屏障动作中共享状态)。如果我错了,请纠正我。

因此,在我的示例中,我试图在一定数量的参与方/线程到达障碍后在每个线程中执行一些随机加法和减法代码。我究竟做错了什么?

0 投票
0 回答
76 浏览

java - 如何使用移相器确保可运行文件按顺序执行

我有一个可运行的列表,它们被发送到移相器执行,但它们没有按照调用顺序执行。例如,如果我向移相器发送两个可运行文件,它应该打印“testing 0 testing 1”,但有时它会打印“testing 1 testing 0”

代码在这里:

0 投票
3 回答
286 浏览

java - 灵活的 CountDownLatch 由于限制不能使用 Phaser

我收到一个包含 N 个条目的大文件。对于每个条目,我正在创建一个新线程。我需要等待所有 N 个线程被终止。

一开始我使用的是 Phaser,但它的实现仅限于 65K 方。所以,是因为 N 可能像 100K 一样爆炸。

然后,我尝试了 CountDownLatch。这很好用,非常简单的概念和非常简单的实现。但是我不知道N的数量。

Phaser 是我的解决方案,但有这个限制。

有任何想法吗?

这篇文章是相关的: 灵活的 CountDownLatch?

0 投票
1 回答
353 浏览

java - 使用和重用 Phaser 而不是 join()

我必须在主线程中等待工作线程的终止,然后(在某些情况下)我启动这些线程并再次等待终止,等等。

通话join()效果很好,但我想做得更快。

Phaser 看起来像我正在寻找的东西,但我做错了:

0 投票
2 回答
1007 浏览

java - 移相器同步使用

一般问题

众所周知,Phaser 可用于同步JavaDocs和Niklas Schlimm的博客中提到的所有任务的开始时间。

Niklas 绘制了一个非常容易理解的同步图像:

现在假设有一个任务层次结构:

所以依赖树是这样的:

在一般情况下,有一个依赖树需要解决(假设在游戏管道中,一些是 AI / 游戏逻辑 / 渲染任务)。幸运的是,有一个“大”同步点并且树是固定的(但不是参与方的数量)。用几个移相器来解决是微不足道的。但是是否可以只使用一个移相器?

一种特殊情况

具体来说,我做了一个程序来解决以下问题。

代码在这里:

可以看到Phaser使用了多个 s。保留多个移相器(如上)更好,还是只使用一个大移相器?还是推荐使用 Java 中的任何其他同步方法?

0 投票
1 回答
459 浏览

java - 阶段终止后的 java.util.concurrent.Phaser 回调

Phaserjava.util.concurrent包中调查并编写了代码示例:

输出:

输出与我想要的有点不同:

我想 :

因此,我希望两者 之后和之前都严格phase X finished打印PhaseThread # start execute phase XPhaseThread # start execute phase X+1

我理解为什么我的代码工作不正常,但我不知道如何实现所需的行为。我认为这是可能的,因为到处都写了Phaser覆盖CyclicBarrier功能。

0 投票
1 回答
328 浏览

java - 使用 Phaser 等待线程池任务完成

executeTasks()只有在提交到线程池的所有任务都完成后,我才想从我的方法返回。请注意,我的线程池具有可配置的线程池大小并SynchronousQueue用作后备队列,因此我的 for 循环仅在线程可用时才通过提交任务来安全地进行。所以,我只想等待最后的任务。我正在使用Phaser这个。

我创建了一个带有 1 个注册方的 Phaser,即当前线程,并且我在向线程池提交任务之前向 Phaser 注册了一个新方,当任务完成时,我取消注册任务方。当 for 循环通过提交最终任务完成时,我希望我arriveAndAwaitAdvance()会等待注册方到达,但它只会发现所有这些方在一段时间后都被取消注册,然后继续前进并从我的方法返回。

我认为这将解决我的问题。如果我错了,或者是否有其他更好的方法,请告诉我。Countdownlatch 不会有帮助,因为我的线程池大小是可配置的。我知道有一个计数器和监视器可以解决这个问题,但我想要像 Phaser 这样的开箱即用的解决方案。

0 投票
1 回答
106 浏览

java - “Parties”,因为它们与 java 的 Phaser 对象有关

我正在使用Phaser尝试在我的 java 代码中进行一些同步。该文件不断提到已注册/未注册的“当事人”......

在这种情况下,什么是“派对”?它是指单个执行线程吗?我不断查看来自各种来源的文档,但他们都假设知道这一点。我可以阅读一些基本的并发文本以更好地了解正在发生的事情吗?

我的理解是,对于代码中发生的每个“注册”,必须发生相应的“arriveAndDeregister”,然后主线程才能使其通过“arriveAndAwaitAdvance”行。这接近正确吗?