以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]多线程的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=131084) |
-- 作者:chnfo -- 发布时间:2019/2/15 21:36:00 -- [求助]多线程的问题 看到高级开发指南中的多线程,想起以前做的一个功能(只是类比举例,不代表真实应用,真实的计算模型比下面的例子复杂很多,而且数据量很大) 例如要展示商品的年度进货量、季度进货量、月进货量。 以前是按顺序计算年度、季度、月进货量,然后展现在界面表中,在数据量大的时候,耗时较长。 如果是多线程,是否可以同时开启三个线程来分别计算之后,再将结果合并到一个表中,然后展现到界面表中,这样耗时应当会减少一些。 那么,如果这样应用,要注意什么问题?
[此贴子已经被作者于2019/2/15 21:39:09编辑过]
|
-- 作者:zhy400137 -- 发布时间:2019/2/15 21:50:00 -- mark |
-- 作者:有点蓝 -- 发布时间:2019/2/15 21:52:00 -- 看:http://www.foxtable.com/mobilehelp/scr/277.htm 可以同时开12个线程,分别计算一个月的数据;或开4个线程,计算4个季度的数据
|
-- 作者:chnfo -- 发布时间:2019/2/15 22:20:00 -- 蓝兄误解我的意思了。 假如说现在是11月份。 我想知道的是各种商品的三个数字。一是年度累计(也就是1-11月的),二是第4季度(10-11月),三是月(单指11月的) 这时候就很难用for each 去开三个线程了。 如果要缩短计算时间,该如何处理? 直接这样? Functions.AsyncExecute("年度累计") Functions.AsyncExecute("季度累计") Functions.AsyncExecute("月度累计")
[此贴子已经被作者于2019/2/15 22:26:08编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/2/15 22:26:00 -- 就是这个意思。 如果数据量比较大,1-11月每月一个线程同时进行统计,全部统计后再加总,第4季度就是10-11月这2个月的计算结果汇总 如果数据量相对较小,按季度开线程计算即可
|
-- 作者:chnfo -- 发布时间:2019/2/15 22:31:00 -- 其实真实数据,并不是因为月份多,而是因为品类多(4万行)。 然后还有一些比较复杂的计算导致的。 |
-- 作者:有点蓝 -- 发布时间:2019/2/15 22:40:00 -- 原理都是一样的啊,不管是按月,或是按品类、品牌。供应商....目的其实就是把把数据分成可以独立计算的小单位,放到线程里计算,然后再汇总。比如每1000个品类一个线程、某个供应商的品类一个线程、...... 也可以每个月初把上个月的数据统计出来,把结果记录到表中,以后直接取计算结果,不需要每次都重新统计一次......... 方法有很多,达到目的就行,至于这个方法能不能用,试过才知道
|
-- 作者:chnfo -- 发布时间:2019/2/16 11:35:00 -- 比如每1000个品类一个线程、某个供应商的品类一个线程、...... 如果要这样应用,全局变量、同步函数、异步函数该如何定义?这一块不是很好理解。
|
-- 作者:有点蓝 -- 发布时间:2019/2/16 12:15:00 -- 具体问题具体分析。如果如果这些品类都是各自计算,和其他品类没有交互,不需要什么全局变量、同步函数,直接计算把结果写入数据库即可。 如果是按月份计算,然后需要汇总,看看这个:http://www.foxtable.com/mobilehelp/scr/3270.htm,原理一样的
|
-- 作者:chnfo -- 发布时间:2019/2/16 15:51:00 -- 如附件所示(只是类比方法,删除了很多数据)。 Tbgoods是商品分类,TBRK是库存数据。 目的是要获得当前日期所在年度的数量、金额;季度的数量、金额;月份的数量、金额。 因为数据量可能比较大,类似的用多线程来应当怎么做呢?
|