找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1453|回复: 11

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

[复制链接]
发表于 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 | 显示全部楼层
回复 顶

使用道具 举报

发表于 2009-2-25 09:31:19 | 显示全部楼层
把那个多次调用的VI该为"克隆"就行
回复 顶

使用道具 举报

 楼主| 发表于 2009-2-25 10:28:27 | 显示全部楼层
本帖最后由 labc 于 2009-2-25 10:36 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

发表于 2009-2-25 12:01:06 | 显示全部楼层
我觉得你的算法是有点问题,读取数据库数据为什么是一个一个读进来呢?完全可以将整个TABLE的某列数据读出来的.读出为1D的SN,然后再做1D数组的处理,这样的算法较为合理点. 或者你可以将简单的程序部分和ACCESS数据发上来,然后写上你的要求,我帮你改下.
回复 顶

使用道具 举报

发表于 2009-2-25 12:26:18 | 显示全部楼层
感觉速度反而变慢了, 我的电脑是双核的, 但产线的电脑是单核的.
labc 发表于 2009-2-25 10:28

改为"克隆"以后,肯定会变慢的,如果电脑老点的话,因为克隆就是多线程调用了,会占用多点内存.如果你想关闭多线程,到Tools>Options>Performance and Disk>Run with Multiple Threads. 那里关闭它.
在LabVIEW 8.2以上, 把ESys.StdNParallel=0 加到LabVIEW的ini file里,然后重启LabVIEW.
回复 顶

使用道具 举报

 楼主| 发表于 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
回复 顶

使用道具 举报

发表于 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来算.按数据结构的时空性能来说,那是算法问题了.
回复 顶

使用道具 举报

 楼主| 发表于 2009-2-25 14:25:14 | 显示全部楼层
本帖最后由 labc 于 2009-4-13 15:53 编辑

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

Thanks.
Labc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

发表于 2009-9-16 19:01:26 | 显示全部楼层
学习了,谢谢!
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-29 11:04 , Processed in 0.053601 second(s), 11 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表