问题:
有1000台终端的实时采集数据上传(10秒1条),服务器解析程序负责解析入库,我计划用多线程进行解析并多线程入库,但1000台终端每台的数据需要按接收到的时间顺序录入(因为需要做相应计算),我的想法是每个线程负责300台终端解析入库,根据终端是否在线动态增减线程数量。通过SOCKET接到的终端数据(带有终端ID),每300台一个线程,并且以后对应终端数据接到后按照先前分配的线程放到对应线程队列里,等待解析入库。30分钟没有数据就判断终端掉线,就在线程中去掉该终端ID。问题是:
1、如果先前上线900个,那么就有3个线程,但是随着终端掉线,对应线程需要被停止。怎么做到?怎么做到当每个线程都不足300时,怎么整合呢?有没有必要做整合?
2、我用类把数据队列和线程封装在一起了,当线程终结的时候把对应的终端ID关系去掉。当增加线程时就要增加类实例了,这样需要判断类实例有没有存在了,生命周期问题?在While循环里定义相关类实例,并启动线程,把该类实例保存到Array里,当这个While循环结束,这个类实例还存在吗?
请大家帮忙,看我哪里的知识有漏洞?给点建议也好啊。
有1000台终端的实时采集数据上传(10秒1条),服务器解析程序负责解析入库,我计划用多线程进行解析并多线程入库,但1000台终端每台的数据需要按接收到的时间顺序录入(因为需要做相应计算),我的想法是每个线程负责300台终端解析入库,根据终端是否在线动态增减线程数量。通过SOCKET接到的终端数据(带有终端ID),每300台一个线程,并且以后对应终端数据接到后按照先前分配的线程放到对应线程队列里,等待解析入库。30分钟没有数据就判断终端掉线,就在线程中去掉该终端ID。问题是:
1、如果先前上线900个,那么就有3个线程,但是随着终端掉线,对应线程需要被停止。怎么做到?怎么做到当每个线程都不足300时,怎么整合呢?有没有必要做整合?
2、我用类把数据队列和线程封装在一起了,当线程终结的时候把对应的终端ID关系去掉。当增加线程时就要增加类实例了,这样需要判断类实例有没有存在了,生命周期问题?在While循环里定义相关类实例,并启动线程,把该类实例保存到Array里,当这个While循环结束,这个类实例还存在吗?
请大家帮忙,看我哪里的知识有漏洞?给点建议也好啊。
解决方案 »
- 请教一个问题,一个字符串,数字后的第一个字母大写。。。
- 我的sql server2008 本地服务器显示空
- 帮忙将C代码转成C#
- IList<>的add方法到底从哪里实现的呢?
- C#代码
- DataGrid里面,增加新行,动态改变每一行某一个column的columntype
- 电脑中病毒了,浏览器出现的问题...奇怪的问题
- 简单的问题,希望大虾能够帮忙看看(up者有分)
- 为什么 用CheckedListBox1.CheckedItems[i].ToString() 没有获得值 打印出来的是System.Data.DataRowView
- 高分求串口编程
- 大家帮我看看这是怎么回事!
- 菜鸟才.net区问个问题
还有我现在做的程序,用的是多线程处理多个表,基本是一对一的情况,但是,一个一个运行我还算正常,但是一旦用for循环运行就出错!我断点了一下,当出错的时候,大概意思是我缓冲的表datatable丢失了!不知道您知道怎么回事不!