问题标签 [gpars]

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 投票
2 回答
462 浏览

groovy - GPars 报告大量异步函数的状态并等待完成

我有一个解析器,在为一行收集数据之后,我想触发一个 aync 函数并让它处理该行,而主线程继续运行并获取下一行。

我看过这篇文章:如何在 Groovy 中同时执行两个任务并等待结果?但我不确定这是适合我情况的最佳解决方案。

我想要做的是,在读取所有行之后,等待所有异步函数完成,然后再继续。使用 Promise 集合的一个问题是列表可能很大(100,000+)。

另外,我想在我们进行时报告状态。最后,我不确定是否要自动等待超时(例如在 get() 上),因为文件可能很大,但是,我确实希望允许用户出于各种原因终止该进程。

所以我现在所做的是记录解析的行数(因为它们通过rowsRead发生),然后使用来自 Promise 的回调来记录正在完成处理的另一行,如下所示:

其中rowsProcessed是一个 AtomicInteger。

然后在工作表末尾调用的代码中,在完成所有解析并且我正在等待处理完成之后,我正在这样做:

好消息是,我这里没有 Promise 对象的爆炸 - 只是一个简单的计数来检查。但我不确定经常睡觉是否与检查每个 Promise() 对象上的 get() 一样有效。

所以,我的问题是:

  1. 如果我改用 Promises 的集合,如果执行上述 while 循环的线程被 Thread.interrupt() 中断,get() 会做出反应并返回吗?
  2. 使用 Promises 集合并在每个上调用 get() 会比尝试睡眠并经常检查更有效吗?
  3. 有没有我没有考虑过的另一种更好的方法?

谢谢!

0 投票
1 回答
418 浏览

groovy - GPars forkOffChild 异常处理

我正在使用 GPars 的 fork/join。当我在调用 forkOffChild 后抛出异常时,它会被掩埋。

例如:

在这里,我设置了一个标志,因此我知道闭包已被递归调用。然后,我抛出一个异常,它被“内部”捕获,但重新抛出从未被“外部”捕获。所以我不知道分叉的孩子失败了。

我也尝试了异常处理程序,但它似乎也没有被调用。

这是预期的行为,还是我做错了什么?有什么策略可以帮助解决这个问题吗?我不能让孩子默默地失败。

谢谢!

0 投票
2 回答
301 浏览

groovy - Groovy - GPars - 活动对象 - 返回值的活动方法

在 Groovy 中,我需要实现一个名为 ActiveObject 的实例MyCounter,以便通过以下代码:

我提供了下面列出的两种实现方式——它们都不起作用。

1.

我想这不起作用,因为调用incrementBy不会阻塞,例如 value 属性,因此实际上在 incrementBy 操作完成之前访问了 counter 变量。

2.

编译器告诉我:

非阻塞方法不能返回特定类型,使用 def 或 void 代替

0 投票
2 回答
3418 浏览

groovy - Groovy/Grails GPARS:如何并行执行 2 个计算?

我是 GPARS 库的新手,目前在我们的软件中实现它。

使用它代替普通的常规方法对我来说没问题

但我想知道如何并行化 2 个返回值的任务。

如果没有 GPARS,我会这样做:

但是(如何)使用 GparsPool 可以做到这一点?

0 投票
2 回答
3209 浏览

groovy - 当抛出异常时,如何使用 GPars 知道所有线程都已完成?

在线程抛出异常的情况下,我如何才能等到所有未抛出异常的线程都完成(因此用户在一切停止之前不会再次启动)?

我以几种不同的方式使用 GPar,因此我需要为每种方式制定策略(并行集合、异步闭包和 fork/join)。异常不会被掩埋,它们可以通过承诺、getChildrenResults 等得到很好的处理,所以这不是问题(感谢 Vaclav Pech 的回答)。我只需要确保主线程一直等到仍在运行的任何内容完成或以其他方式停止。

例如,当使用并行集合时,一些线程会继续运行,而一些线程在异常发生后永远不会启动。所以很难说有多少人在外面等待,或者有可能抓住他们。

我的猜测是可能有一种方法可以使用线程池(在这种情况下为 GParsPool)。有什么建议么?

谢谢!

0 投票
1 回答
1046 浏览

gpars - GPars - 提前终止并行收集的正确方法

终止并行收集的最佳方法是什么(在线程之一引发异常或用户发起中断的情况下)?

无论哪种情况,我都可以轻松设置一些标志,然后在循环顶部检查它。但是,如果我的集合中有 10,000 件物品,我宁愿告诉将它们送入 ForkJoinPool 的任何东西停止送入它们。让已经开始的 5 或 20 件左右完成,但不要再开始了。

这是一个示例,您可以插入以了解我的意思。如果我模拟其中一个线程抛出异常,则看起来集合停止处理,因为线程计数的第一次打印(在“A:”消息处)通常非常小(5 左右)。但是,通过在 GParsPool.withPool 之外打印计数(在“B:”处),我可以看到它们确实一直在运行(始终都是 100):

如果我在 eachParallel 中使用 pool.shutdown(),它没有影响。如果我使用 pool.shutdownNow(),它会像我想要的那样结束处理,但会抛出一个 CancellationException,这会掩盖我想要的真正异常。我可以将“真正的”异常存储在一个变量中以供以后访问,但我想知道是否没有更好的方法来告诉并行集合干净地停止。

0 投票
1 回答
840 浏览

grails - 尝试将 GPars 与 IntelliJ 和 grails 一起使用

在 IntelliJ Grails 项目中使用外部 JAR GPars 时遇到了很多麻烦。我认为这是指定依赖项的问题。我正在使用GPars-1.0.0。我将它保存在 lib 目录中,并使用 IntelliJ GUI--项目结构->模块->添加将其作为依赖项包含在内。 我同步了。我还尝试直接添加到 BuildConfig.groovy

打字时我得到代码辅助,它编译。但是当我运行以下命令时:

我收到声明“GParsePool.withPool”的 ClassNotFoundException 消息 jsr166y.ForkJoinPool

有任何想法吗?我是否在 BuildConfig 中正确指定了依赖项?我的代码示例可能是错误的,但似乎遵循此示例

0 投票
1 回答
91 浏览

concurrency - GPars 锁返回 null

当我尝试锁定表中的一行时,有时会返回 null。这意味着什么?我验证域实例在锁定之前不为空:

这输出:

(“状态 1”是状态的字符串表示)

0 投票
2 回答
2308 浏览

hibernate - Grails、GPars 和数据持久性

有些东西没有被冲洗掉。正在发生的事情的简化示例:

这输出:

我不明白我是否必须对 Session 和 Transaction 做一些事情以使数据保持不变,或者这是否是 GPars 中的错误。底层休眠级别发生了什么?

我希望最近创建的 Person 在并行闭包中可见。

0 投票
2 回答
523 浏览

java - 比较 Java 和 GPar

我正在尝试为 Java 和 GPars 找到一个可比较的代码片段来可视化,GPars 是多么容易。
以下代码在这两种情况下是否相同?我不仅指输出,还指“内部”发生的事情。或者有没有办法进一步缩短它?

爪哇:

时髦的: