labc 发表于 2009-2-24 15:51:57

"多线程"从数据库抓取数据

本帖最后由 labc 于 2009-2-24 16:22 编辑

"多线程"从数据库抓取数据
      需要从Access数据库中提取数千个SN在不同温度下的测试数据, 按照常规方法一个一个地提取需要相当长的时间, 现在想出了同时开10个线程来抓取, 然后整合. 有点像迅雷或Flashget的做法.
      下图中的3T Data 10 Treads是用来提取其中一部分SN对应的数据的,内部是循环结构.
0-9对应的是10个线程, 10是用来处理尾数的, 如213个SN, 前面10个线程各抓取21个, 第11个线程只抓取3个.

      问题是, 程序似乎没有并行执行, 总是先从10或9开始,8-->7-->...-->0,这样好像没有达到多线程的目的? 我是从进度条上看到的, 墨绿色的2根线是进度条指示器和状态说明.

Thanks.

Labc

三岁就很帅 发表于 2009-2-25 09:20:29

程序真整齐。赞一个。

三岁就很帅 发表于 2009-2-25 09:20:51

分时间片。并行也是分时切换。没完全并行。

三岁就很帅 发表于 2009-2-25 09:20:59

多核估计可以。

HHHHLLLL 发表于 2009-2-25 09:31:19

把那个多次调用的VI该为"克隆"就行

labc 发表于 2009-2-25 10:28:27

本帖最后由 labc 于 2009-2-25 10:36 编辑

感觉速度反而变慢了, 我的电脑是双核的, 但产线的电脑是单核的.

HHHHLLLL 发表于 2009-2-25 12:01:06

我觉得你的算法是有点问题,读取数据库数据为什么是一个一个读进来呢?完全可以将整个TABLE的某列数据读出来的.读出为1D的SN,然后再做1D数组的处理,这样的算法较为合理点. 或者你可以将简单的程序部分和ACCESS数据发上来,然后写上你的要求,我帮你改下.

HHHHLLLL 发表于 2009-2-25 12:26:18

感觉速度反而变慢了, 我的电脑是双核的, 但产线的电脑是单核的.
labc 发表于 2009-2-25 10:28 http://www.cpubbs.com/bbs/images/common/back.gif
改为"克隆"以后,肯定会变慢的,如果电脑老点的话,因为克隆就是多线程调用了,会占用多点内存.如果你想关闭多线程,到Tools>Options>Performance and Disk>Run with Multiple Threads. 那里关闭它.
在LabVIEW 8.2以上, 把ESys.StdNParallel=0 加到LabVIEW的ini file里,然后重启LabVIEW.

labc 发表于 2009-2-25 13:19:59

本帖最后由 labc 于 2009-2-25 13:25 编辑

(1), SN是预先给定的, 每次工人会通过扫描输入数千个SN.
(2), 每个SN在不同的温度下可能测试了好几次, 但是我只需要不同温度下最新的那次测试数据.
(3), 不同温度下的所有测试数据全部储存在Access内的同一张表格内, 数据行数在8万以上,列数超过20.

其实不管采用什么方法,只要能快速的抓取出需要的数据就好了, 如果克隆够快,用它也无所谓, 但事实上并不快.

我用的是 LV8.6.

按照NI的说法, 程序是多线程的, 但那我第一个帖子里的10+1个线程看上去并不是同时进行的, 比较奇怪.

Thanks.
Labc

HHHHLLLL 发表于 2009-2-25 14:14:12

我个人认为多所谓的多线程,并不是你点亮了调试灯,看数据点流向不同步就认为不是多线程的说法.你的程序读取数据慢,那是算法问题,1万个SN,其实并不大,一个字符=2个字节,假如你的SN有50个字符(够长的SN了吧),那也是100个字节
1字节= 0.0009765625 KB,你有1万个SN,也就是10000X100X0.0009765625=976.5625K,不够一M的数据.现在的内存都是用G来算.按数据结构的时空性能来说,那是算法问题了.

labc 发表于 2009-2-25 14:25:14

本帖最后由 labc 于 2009-4-13 15:53 编辑

同意你的观点, 由于每个SN对应的数据很多,可能影响了速度.
我的算法很简单, 以SN和PN为关键词,结合ID(ID最大的就是我想要的),用SQL语句抓出数据, 请参见下图.
我不是通过数据流向来看是否是并行执行的, 而是通过前面板看到的, 前面板上可以显示每个Tread的进度. 现在发现clone与否对速度没什么影响.

Thanks.
Labc

fo925 发表于 2009-9-16 19:01:26

学习了,谢谢!
页: [1]
查看完整版本: "多线程"从数据库抓取数据