请教多线程数据采集(100分)

  • 主题发起人 主题发起人 adams888
  • 开始时间 开始时间
A

adams888

Unregistered / Unconfirmed
GUEST, unregistred user!

这样的,用一台pc机采集600个终端点
数据,这600个终端点用nport的com口来管理,也就是说pc机只要采集20个com口的数据
就可以了,采集的时候只要调用dll文件的com函数采集数据。dll就是管com口的,现在我
用多线程去采集,怎么样才会合理。我想一下子创建20个线程,一个线程管一个com口,
这样做不合理吧,我想建十个线程,怎么样动态分配这十个线程给20个com口呢,另外这
线程同时调用dll文件,但是参数不一样,存在线程同步问题吗?请多指教!!?
?
 
怎么,你的机器同时有20个COM口?
同时开20条线也没有什么问题啊,如果只是数据采集,处理量应该不是很大,没问题。
 
建议你为每个端口使用不同的进程而不是线程,这样使你的程序的稳定性大大提高。
如果觉得需要总体的控制,你可以在设计一个监控程序来控制。
如果你觉得必要,我可以和你一起设计此程序。mail to:lailiey@21cn.com
 
最好一个线程管一个com口,我开发的监控就采用线程和com 口一对一,这样可以保证数据采集的可靠性和稳定性
 
同意 SNOWONSKY 的意见。使用线程本身就比进程节约资源,而且20个com并不多,
现在一般的计算机完全有能力容那20个线程。
 
呵呵,我刚做完一个模快,每个线程控制一个Com口(有多少个Com口,就自动创建相应数量的线程,效果还可以,
问题是sqlserver.exe占用内存增长惊人(每7条记录增长100k,而每条记录才40个字节)
 
看了上面的一些建议,感觉如果真的是一个线程管一个com,那么系统跑起来,其它什么也
不要用了,建议用线程池。分配10个线程容量的池,初始都设为休眠态,那个com口有数据
传过来,就启动对应的第一个可用的线程,线程完成工作后,再次进入休眠态,如果没有
可用的线程,将数据按顺序拷贝至系统公用内存区(也可以是公用大变量了),然后最先
处理完工作的线程转向处理公用内存的东西
如有兴趣,可以一起讨论 dylover@ucinfo.com
 
你采集的是什么数据?一定要放到数据库终么?如果是波形数据采用二进制文件形式不好么?最好再来一次压缩。
 
后退
顶部