问题标签 [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.
grails - 在 Grails 中处理数据库支持的异步回调
我一直致力于在 Grails 中实现基于 Interactive Brokers 的 API 的自动交易系统(这里的简要概述:Grails - 与 3rd 方 API 的异步通信)的时间比我愿意承认的要长。这是一种高频交易策略,所以并不是下单 100 股就被成交那么简单。涉及很多研发,所以我的架构和设计一直在并且继续随着时间的推移而变化和发展。
在过去一个月左右的时间里变得很清楚的是,API 的异步特性正在扼杀我。我有一个我在 Grails 中的预期职位的模型,但这并不能自动反映经纪公司的实际状态。有一个创建订单的过程,其中一些现在会被执行,一些稍后会执行,而有些则永远不会。可能存在部分成交、取消或拒绝订单,或任何数量的其他错误。并且异步更新已经变成了悲观锁的噩梦,丑陋的关系和职位、意图、订单、交易等之间的依赖关系。尽管如此,由于所有这些不雅、臭的代码,有时我的内部模型会不同步与经纪账户的实际状态。这是一个非常危险的情况。
所以,我意识到我需要某种异步框架来允许 Grails 和 IB API 保持完全相同的状态而不会失败。我对 Gpars、Akka、Promises 和 Actors 有点熟悉,但只是表面上;我对他们中的任何一个都没有动手经验。就在最近,我看到 Parse 的 Bolt 框架任务,想知道这是否合适。我真正需要的不是计算或集合的并行性或多线程。我要做的就是确保来自 IB 的异步回调始终正确地反映在 Grails 域类中。我希望正确的框架能让我删除我为解决这个问题而编写的大量丑陋的意大利面条代码。
我需要的是针对解决此问题的正确框架、模型或架构的建议。我欢迎任何建议,无论我是否在上面提到过。
grails - 导致数据库更新的高度异步事件的架构
我最初问在 Grails 中处理数据库支持的异步回调,但从那时起我做了很多研究,所以我问了一个更尖锐的问题......
最近,我尝试在平台核心插件中使用事件 API,但是乐观和悲观的锁以及会话和事务管理,再加上非确定性回调,使得这变得不可能变得稳固和稳定。我还在追我的尾巴。
所以,我正在考虑一种不同的方法,但我对 GPars 和 Actors 的经验不足,无法知道我是否正确地处理了这个问题。我想做的是创建一个负责所有数据库更新的Actor。将任何内容写入数据库的唯一方法是向该单例 Actor 发送消息。所有异步回调都将执行它们的逻辑,但任何涉及数据库写入的内容都将发送到 DatabaseActor。
这是一个疯狂的瓶颈吗?它是一个合理的架构吗?
gpars - 如何等待 GPars Agent 类完成任务?
目前我正在使用 GPars Agent 类来处理典型的购物车场景。我有一种情况,我需要在 viewcart 任务返回响应之前等待 addtocart、minicart 任务完成。webservice 调用在返回 addtocart/minicart 之前返回 viewcart。其他任务完成后,如何让 Agent 类知道处理 viewcart?
java - 为什么即使没有 forkOffChild(),GPars runForkJoin 也很慢?
这是顺序版本:
运行代码需要几秒钟。
上面的代码需要几分钟才能完成。forkOffChild()
我还没有打电话childrenResults()
。我在 Windows 和带有 Intel 超线程(2 个逻辑 CPU)的单核 CPU 中运行此代码。JavaRuntime.runtime.availableProcessors()
返回 2。
我不明白为什么使用runForkJoin
比顺序代码慢得多的代码(分钟与秒)。
grails - Groovy/Grails 承诺/未来。没有 .resolve(1,2,3) 方法。奇怪的?
我正在开发 Grails 应用程序。我想要做的是锁定请求/响应,创建一个承诺,并让其他人解决它,即代码中的其他地方,然后刷新响应。
我发现真正奇怪的是 Promise promise = task {} 接口没有类似于 resolve 或类似的方法。
我需要锁定响应,直到有人解决了承诺,这是在开发模式下设置的全局/静态属性。
Promise 接口: http: //grails.org/doc/latest/api/grails/async/Promise.html
我查看了 GPars 文档,在那里找不到任何类似于解析方法的内容。
如何创建一个承诺,锁定响应或请求,然后在有人解决它时刷新响应?
java - Cucumber-jvm 线程安全吗?
我想在多个线程中运行相同的 Cucumber 测试。更具体地说,我有一组功能,并且在一个线程中运行这些功能可以正常工作。我使用 JSON 格式化程序来记录每个步骤的运行时间。现在我想做负载测试。我更关心多线程环境中每个功能/步骤的运行时间。所以我创建了多个线程,每个线程都在同一个特性集上运行。每个线程都有自己的 JSON 报告。这在理论上可能吗?
由于某些项目设置原因,我无法使用 JUnit 运行器。所以我不得不求助于 CLI 方式:
我试图为每个 Cucumber 运行创建一个单独的线程。问题是,只有一个线程具有有效的 JSON 报告。所有其他线程只是创建空的 JSON 文件。这是 Cucumber 的设计还是我错过了什么?
java - 如何创建一个 groovy 演员,除非停止,否则它会一直执行
我想创建一个持续执行任务的 Actor,然后它可以通过外部调用停止来停止,但被完全阻塞了。
演员应该看起来如下
创建完成后,可以通过我的测试文件@BeforeMethod 启动actor:
它的句柄可以由主线程保留,并通过我的测试文件中的以下命令停止,@AfterMethod:
但是,我无法使用上述方法。首先,我发现我不需要“myActor.start()”,在@BeforeMethod之后,它只是自动运行;
其次,虽然我尝试在我的测试文件的@AfterMethod 中调用“myActor.send”“停止”,但看起来 myActor 的循环{}从未被访问过,并且一直在使用 while{}。
我也尝试将 loop{} 放入 while{},但它仍然无法正常工作,并且 loop{} 仍然没有被调用
我错过了什么吗?
谢谢!
groovy - 使用 HtmlUnit 的并发请求
这是我的代码:
它打印这个:
为什么 pageURL 与 URL 不匹配?第 5 项有多个请求,第 1 项没有请求。
grails - 使用 grails 和 gpars 处理大量数据
我有一个 Grails 应用程序,它每天午夜运行一项工作。在我的示例应用程序中,我有 10000Person
条记录,并在石英作业中执行以下操作:
忽略,repeatInterval
因为这仅用于测试目的。当作业被执行时,我得到以下异常:
似乎在我使用时线程池尚未设置为 10000 我withPool(10000)
可以分块进行此计算(现在仅打印日志语句)吗?如果是这样,我怎样才能知道最新处理的项目是什么(例如从哪里继续)?
multithreading - 如何并行化 GPars Actor?
我对 GPars Actors 的理解可能不正确,所以如果我错了,请纠正我。我有一个 Groovy 应用程序,用于轮询 Web 服务以查找工作。当找到一个或多个工作时,它会将每个工作发送到DynamicDispatchActor
我创建的一个,然后处理该工作。这些作业是完全独立的,不需要向主线程返回任何内容。当多个作业同时进入时,我希望它们被并行处理,但无论我尝试什么配置,演员都会先入先出地处理它们。
举一个代码示例:
这打印出来:
在每次打印输出之间稍作停顿。另请注意,每个打印输出都来自同一个 Actor/线程。
我想在这里看到的是前 5 个数字会立即打印出来,因为线程池设置为 5,然后随着这些线程的释放,接下来的 5 个数字会被打印出来。我完全不在这儿吗?