问题标签 [heavy-computation]

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 回答
573 浏览

javascript - 繁重的 JavaScript 计算块

我做(在 JavaScript/jQuery 中)繁重的计算。问题是这些计算阻塞了 UI 线程,我(尝试过)找不到避免这种情况的方法。

一些要求:

  • 我无法使用 webWorkers
  • 计算必须在客户端(我不能在服务器端进行 AJAX 调用)

我是一名 Android 程序员,所以我知道如何在 Java 中做到这一点(启动线程、进行计算、将数据发送到 UI 线程),所以我在这里尝试做同样的事情。

因此,这些繁重的计算只能有一个活动实例(我将制作一个 GIF 以告知用户他不能在此之前再次启动它),因此不需要管理多个调用(最后结束,开始新的)。

这是代码:

我正在对数据进行排序(为了避免从服务器重新加载移动设备的数据,这就是为什么我不能在服务器端进行此操作)。

我试图在函数中复制(完整复制,无引用)数组,因为我认为包含数据的初始变量,因为她不在函数中,在 UI 线程上,并将其访问到函数调用 UI 线程。=> 不起作用。(所以我错了)。

setTimout( {computations}, 0)如您所见,我尝试在 a 中启动计算,这是我在其他 Stack Overflow 类似问题上看到很多时间的解决方案 =>也不起作用

我在基本的 JavaScript 环境中运行,我使用的唯一库是 jQuery。

那么,这里是否有一种方法可以强制此计算在其他线程(或类似的线程)中工作,或者更全局,不要阻塞 UI 线程

0 投票
3 回答
333 浏览

android - 如何处理几种方法,做繁重的计算?

在我的应用程序中,我导入 gpx 和 kml 文件以在地图上显示轨迹和航点。对于这个操作,我使用了大约 5 种方法。一切正常,除非我尝试使用 exfilechoser 导入几个长的 gpx/kml 轨道。屏幕变黑几秒钟,logcat 说:跳过帧(> 600)。我怎样才能得到这些 UI 计算?或者我怎么能用大约 5 种方法来使用 AsyncTask?这可能吗?

0 投票
1 回答
4660 浏览

python - 存储和使用经过训练的神经网络

我正在尝试开发一个神经网络来预测时间序列。

据我了解,我正在使用训练集训练我的神经网络,并使用测试集对其进行验证。

当我对结果感到满意时,我可以使用我的神经网络来预测新值,而神经网络本身基本上就是我使用训练集调整的所有权重。

这个对吗?

如果是这样,我应该只训练我的网络一次,然后只使用我的网络(权重)来预测未来的值。您通常如何避免重新计算整个网络?我是否应该将所有权重保存在数据库或其他东西中,这样我就可以随时访问它而无需再次训练它?

如果我的理解是正确的,我可以受益于在专用计算机(例如超级计算机)上进行繁重的计算,然后在网络服务器、iPhone 应用程序或类似的东西上使用我的网络,但我不知道如何存储它。

0 投票
1 回答
648 浏览

java - 繁重处理期间的 LibGDX 加载屏幕

长话短说: 我正在尝试在 LibGDX 中制作加载屏幕,不仅需要加载纹理和音频等资产,还需要创建世界对象(超过 1000 万个对象)-我可能想研究减少数量未来的物体,但我的问题仍然适用于它是一个物体还是数万亿个物体。

在对象初始化期间,GDXrender()方法停止,由于我推测的滞后。它会延迟整个应用程序进入“无响应”几秒钟。

我已经研究了几个月,但没有找到太多东西。我发现的 90% 的话题或我问的人,总是说同样的话;使用 AssetManager。我试过这个,但它似乎只支持资产,而不是繁重的处理世界对象。有人告诉我它可以支持自定义类,但是由于缺乏文档,我从来没有让它工作。

与我最相似的最佳主题是这个主题,让我想到在 Gdx.app.postRunnable() 中使用 Gdx.app.postRunnable()。结果是这样的:

该解决方案效果很好。它做了繁重的处理,设置加载屏幕的百分比,然后绘制它。因此,为了显示,这个解决方案解决了我从未绘制百分比的问题。但是,这种解决方案仍然使应用程序在繁重的进程之间变成“无响应”;这会冻结最终的音乐播放。

通过在 postRunnables 中添加足够的 postRunnables,不会有延迟,因为繁重的进程不再存在 - 相反,它建立在繁重的进程拆分为迷你进程的基础上,从而解决了“无响应”状态。虽然这么多postRunnables对于“干净的代码”来说不是很实用,因为它需要30多个postRunnables,而上面的代码只有2个。代码很容易变丑,所以我寻求替代方案。

这篇文章也很有趣,解释了我面临的完全相同的问题,但是结果没有成功。

我在 Java Swing 中通过两个线程实现了这一点;一个主线程和一个 loadingScreen 线程 (LCThread)。进入 loadingScreen 时,LCThread 开始绘制 loadingScreen,而主线程进行繁重的处理。完成后,主线程使用它之前处理的对象。可悲的是,我无法将其转换为 LibGDX,因为两个线程无法单独绘制。

短篇小说:我需要编写一个加载屏幕,它在绘制进度(在render()方法中处理)时加载繁重的后台处理(初始化大量对象)并在显示加载屏幕时播放音乐,所有这些都不会滞后于应用程序进入“没反应”。

你有什么建议吗?

0 投票
1 回答
101 浏览

asynchronous - RxJS 使繁重的工作部分异步,简单

我想让 RxJS Observable 来处理我的繁重工作。但我希望它在需要时使订阅异步。例如:

在这种情况下,after 字符串会在从 observable 输出整个数据之后打印出来。但我希望 observable 处理繁重的工作,并在需要时使剩余的工作异步。

所以我想到的一种方法是将重要的部分放在 setTimeout 中。我已经在网上搜索过,但还没有找到解决方案。有哪些可能的方法,哪一种更好?

0 投票
1 回答
79 浏览

multithreading - F# / MailBoxProcessor 在接近 100% 的负载下对 PostAndReply 没有响应

我有一个MailBoxProcessor,它执行以下操作:

  1. 主循环(type AsyncRunnerhttps ://github.com/kkkmail/ClmFSharp/blob/master/Clm/ContGen/AsyncRun.fs#L257 - 行号可能会随着我不断更新代码而改变)。它生成一些“模型”,将它们中的每一个编译到特定于模型的文件夹中,将它们作为外部进程生成,然后每个模型使用 WCFAsyncRunner通过调用updateProgress. 一个模型可能需要几天时间才能运行。一旦完成任何模型,跑步者就会生成/产生更多。它被设计为以 100% 的处理器负载运行(但优先ProcessPriorityClass.BelowNormalEnvironment.ProcessorCountMailBoxProcessor目前,我通过使用“异步”编辑了几乎所有内容… |> Async.Start以确保我“永远不会”阻塞主循环。

  2. 我可以通过调用member this.getState () = messageLoop.PostAndReply GetState.

  3. 或者我可以向它发送一些命令(再次使用 WCF),例如member this.start(), member this.stop(), ...</p>

这就是有趣的地方。一切正常!PostAndReply但是,如果我运行一个“监视器”,它会通过在无限循环中有效地调用(暴露为)来请求一个状态this.getState (),过一会儿它就会挂断。我的意思是它最终会返回,但会有一些无法预测的大延迟(比如几分钟)。同时,我可以发出命令,它们确实快速返回,但getState仍然没有返回。

是否有可能使其在接近 100% 的负载下响应?非常感谢!

0 投票
1 回答
179 浏览

sql - 在 Rails 中的仪表板视图上处理繁重 SQL 查询的最佳方法

我有这个仪表板(报告),它基本上执行繁重的 sql 查询并将其结果显示在表格网格上,非常标准的东西。

但是,有时,由于数据量大和 sql 复杂性,查询非常繁重,浏览器会一直挂起,直到用户出错。

我没有 n+1 查询,并尝试添加分页,但我仍然面临这个问题。

对此最好的方法是什么?使用后台作业?

有没有办法在后台执行此查询,以防止请求失败?

我尝试实现一个 sidekiq 工作人员,但我不确定在工作完成后是否可以从工作人员那里获得结果。

query包含对字符串的 SQL 查询。

有什么见解吗?

0 投票
0 回答
28 浏览

python - 使用 Numba 并行化矩阵计算

我正在尝试在 Python 3.6 中并行化以下函数:

其中 :
predictors[,]是一个输入数组,具有n-rows 和p-features,并且
d[]是一个-sizen数组。

函数product_cols()定义为:

其中 :
ci[]是 -大小cj[]p数组并且
di, dj是实数。

有人可以帮我简单地并行化吗?

0 投票
1 回答
142 浏览

node.js - 如何在nodejs上完成child_process?

所以,我有一个在 Kubernetes 上运行的节点中提供的服务,我需要每 30 分钟执行一次非常繁重的操作(CRON JOB)。这是我的应用程序上每个租户的一堆数据库操作(目前,5 个租户)。

问题是,如果我在同一个进程上启动所有,即使是异步的,服务会承受过多的负载并崩溃。

因此,我尝试使用 child_process 模块。我的想法是为每个租户创建一个新进程,做它需要做的事情,然后终止该进程。

我正在使用 child_process.fork('heavyLoadFile') 创建子进程。

问题是当工作完成时,CP 并没有被摧毁。他们作为一个“僵尸”过程呆在那里,完全什么都不做。

我试图在 CP 上进行 process.kill() ,但它也杀死了父进程。

我怎样才能只杀死 child_process?哦,你们有没有想出更好的方法来处理这些重物?

0 投票
0 回答
60 浏览

android - Android重度渲染的最佳实践是什么

问题

  • 在 Android 视图中重度渲染的最佳实践是什么?
  • 建议的方法是否指向正确的方向?
  • 有哪些替代方案?

描述

我的 Android 应用滚动浏览heavy rendered content. 一个屏幕的渲染最多可能需要 500 毫秒。最终图像应显示给用户。

Heavy rendering每秒可以触发多次(最多 20 次),只需通过手指拖动即可。

一般来说,只有最后一个电话很重要。可以丢弃中间未处理的呼叫。但是,如果中间调用已处理,则在呈现下一个/最后一个调用时向用户显示结果是有意义的。

显然,如果你heavy rendering放入主线程,UI 将被冻结,用户体验将受到影响。

当前实施

主意

重度渲染以及“最后一次通话很重要”要求让您考虑使用单独的线程和RxJava Flowable.

这个想法是有两个位图:

  • intermediate bitmap- 在一个线程中使用它,让heavy rendering绘制图片所需的时间尽可能多
  • final bitmap- 如果应用正在调用 onDraw 函数,则使用它来存储最终图片并显示给用户

脚步:

  1. 触发处理后,调用被缓冲,只处理最后一个可用的
  2. 渲染执行到intermediate bitmap(这是一个漫长的过程)
  3. 渲染完成后,intermediate bitmap转入final bitmap(这个应该很快)
  4. final bitmap每当应用程序想要刷新屏幕时都会在屏幕上绘制(这也应该很快)。步骤 3 和 4 应该synchronized防止闪烁。

架构

示意图如下所示:

代码

从技术上讲,它可以这样做(也是示意图,省略了一些细节):

问题

一般来说,它有效,但并不完美:

  • 如果渲染和输出intermediate->final都放在主线程中,则屏幕在渲染时冻结,
  • 如果只将输出intermediate->final放到主线程,屏幕闪烁,
  • 如果渲染和输出intermediate->final都放在计算线程中,则在渲染过程中只显示屏幕的一部分。

更新:

这条评论对我帮助很大: https ://stackoverflow.com/a/57610119/10475643

看来,这条线引起了整个小冲突:

因为PorterDuff.Mode.CLEAR不能很好地配合硬件加速。这会导致闪烁和部分屏幕输出。最后,我将两个drawBitmaps 都放到了线程中。只要我删除drawColor或关闭硬件加速,闪烁就消失了。