大运算量方法的处理方式

leeya66 2021-07-24 22:36:46

现在有个运算量很大的后端C#方法,大概要执行5分钟,这种情况下应该如何设计代码呢?

看了网上资料说是后端先开一个线程,开始执行这个方法,

然后呢,前端隔2秒钟去查询这个线程的执行情况,有没有运算完成,

-----------

不知道这种思路是否靠谱,我记得IIS会自动回收线程的.另外,就算线程没回收,后面查询进度的方法,如何定位特定的线程呢,难道把线程放进  HttpRuntime.Cache ?

 

请指教

...全文
710 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2021-07-28
  • 打赏
  • 举报
回复

5分钟,对于用户来说时间太长,你觉得人家会老老实实等你5分钟?
异步处理这个慢操作。
不需要等处理完成,立即提示前端,已经在处理了,请在大概10分钟之后重新查看这个页面。

如果你要完成了立即通知前端,可以用 SignalR 或 WebSocket 。

不过总体上来说,还是太复杂了。能立即显示给用户才是最好的解决方案。
如果你后台的操作,是报表之类的,可以凌晨生成,用户查看时,给用户看结果表,那就这样处理吧。

  • 打赏
  • 举报
回复

把结果存起来就行啊,为什么要定位到特定的线程

wanghui0380 2021-07-25
  • 打赏
  • 举报
回复

这是典型的异步,所以我们换方式来说。
假设这是一个支付场景

你进入支付以后,转账给第3方,然后第3方给你确认。那么现在的实现方式是什么?
很明显,这种情况下,你需要先生成一个订单流水,然后把订单流水号和转账金额提交给第3方,接着等待第3方给个确认,然后你提示页面支付成功。

那么你这里情况一样,我们先不谈啥iis机制,我就当这是一个普通程序,你提交一个执行,我开启生成一个guid 同时开启task,同时放到一个dic<guid,task>里,然后就返回结束response,此时页面会得到找个guid流水号,你的前端应该有得到这个guid号

假设我们也不用什么websocket,singlaR,activemq,mqtt这种推送方式,你就用ajax轮询,你定时轮询找个guid的结果,
当然只需要 dic[guid].isComplete 就可以得知执行是否结束

在回头我们看看如果采用activemq,mqtt这种消息通讯的情况,拿到guid,订阅“xxx执行结果/guid” topic呢,其实也行

最后我们在来看,我们是否需要在iis里dic<guid,task>,,当然其实也可以不在iis里做(最起码的例子,你调用支付宝的接口,他这个耗时执行是在支付报里完成),所以这里衍生出了分布式任务,用mq提交给其他系统执行,用spark,storm提交给其他地方执行,用actor模式提交给其他系统执行

leeya66 2021-07-26
  • 举报
回复
@wanghui0380 dic<guid,task> 这个要放进缓存吧?
wanghui0380 2021-07-27
  • 举报
回复 1
@leeya66 我们只是描述,你可以如何想,如何做。不拘泥技术。你无需管啥缓存还是不缓存。他可以是任意适合的东西。比如就像最后那回复,他可以在数据库里,当然也可以在redis里。甚至都可以不在你现在这个iis里,比如你发给你一个不在iis里的后台程序做可以么?当然可以,甚至他都可以做完了不通知你直接用activemq,mqtt通知client也行,或者你说做完了让我发个短信通知对方也成。(看看你的银行转账不就这样,你转账的时候,银行怎么说?银行说我不确定时间,反正24小时内,但是转账成功了会发给你短信,比较一下你现在要做的和银行转账的说法一样不,当然一样,我不确定他会执行多长时间,反正5分钟内,做完了我会通知你)
leeya66 2021-07-25
  • 打赏
  • 举报
回复

开启线程后,就先responce前端,不等线程执行完再返回前端消息的,

上海程序员3 2021-07-25
  • 打赏
  • 举报
回复

没必要,这个线程自己不停改变某个静态变量,把这个变量显示到前台界面上就行了,这样你就知道它有没有一直在运行了。

tcmakebest 2021-07-25
  • 打赏
  • 举报
回复

IIS?浏览器可不会等你5分钟哦

现有人形机器人控制系统的底层技术都是基于CPU+软件,众多厂商在同质化的技术赛道上竞争。 工信部《人形机器人创新发展指导意见》提出了以应对真实场景下的复杂环境与任务、应对突发情况为特征的实用化人形机器人功能需求,CPU+软件的大运算量并行处理能力、实时性已经不能满足要求。 FPGA 具备高速、并行、运算及引脚资源极其丰富、定时精确(纳秒级)、功能极其灵活、硬件直接实现算法(不需要在操作系统调度下访问片外存储器以读取算法指令序列)、操作数存取机制简单且高效(不需要在操作系统调度下访问片外存储器/外部总线以读取运算过程涉及的各种数据源和状态数据、发出控制指令)(如果执行基于图像分析等大缓存机制的反馈控制算法则需要访问直接连接FPGA引脚的片外存储器)、开发调试手段先进的优点,适合用来实现基于多路高速并行协同采样、高速并行运行多路大运算量协作算法、多通道输出精准协同、强实时性(低延迟量+低延迟抖动量)的高性能复杂反馈控制系统。 这个流程图为在实用化人形机器人研发流程中深入应用FPGA技术提供了技术思路、实施方法,助力机器人厂商以原始技术创新突破内卷、建立新的专利体系与行业标准。
现有人形机器人控制系统的底层技术都是基于CPU+软件,众多厂商在同质化的技术赛道上竞争。 工信部《人形机器人创新发展指导意见》提出了以应对真实场景下的复杂环境与任务、应对突发情况为特征的实用化人形机器人功能需求,CPU+软件的大运算量并行处理能力、实时性已经不能满足要求。 FPGA 具备高速、并行、运算及引脚资源极其丰富、定时精确(纳秒级)、功能极其灵活、硬件直接实现算法(不需要在操作系统调度下访问片外存储器以读取算法指令序列)、操作数存取机制简单且高效(不需要在操作系统调度下访问片外存储器/外部总线以读取运算过程涉及的各种数据源和状态数据、发出控制指令)(如果执行基于图像分析等大缓存机制的反馈控制算法则需要访问直接连接FPGA引脚的片外存储器)、开发调试手段先进的优点,适合用来实现基于多路高速并行协同采样、高速并行运行多路大运算量协作算法、多通道输出精准协同、强实时性(低延迟量+低延迟抖动量)的高性能复杂反馈控制系统。 这个流程图为在实用化人形机器人研发流程中深入应用FPGA技术提供了技术思路、实施方法,助力机器人厂商以原始技术创新突破内卷、建立新的专利体系与行业标准。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧