关于.NET多线程嵌套的管理问题
多线程,没什么经验,请大家多指教。
问题描述如下:
一个WINFORM的应用,在主程序启动后, 会启动N个子线程,形如:
static void main(){
Thread t1 = new Thread (new ThreadStart(Entity1.doWork));
Thread t2 = new Thread (new ThreadStart(Entity2.doWork));
......
Thread tN = new Thread (new ThreadStart(EntityN.doWork));
}
,然后呢,每个 EntityX.doWork 的逻辑中, 又启动了N个子线程,形如:
public class EntityX{
public static void doWork(){
Thread t1 = new Thread (new ThreadStart(Sample1.go));
Thread t2 = new Thread (new ThreadStart(Sample2.go));
......
Thread tN = new Thread (new ThreadStart(SampleN.go));
}
}
现在的问题是: 需要在主程序中,对所有的子线程(子的子)进行生命周期的管理,请教各位有没有好的方案,我自己目前的实现思路是用 timer + thread 数组的轮询方式来做,不过感觉不是很好,希望大家不吝赐教。
针对我要实现的模式, 如果哪位有更好的实现逻辑,也请不吝赐教,先谢谢。
------解决方案--------------------为什么有在线程里又起线程呢
------解决方案--------------------不会。
------解决方案--------------------其实你开这这么多线程性能不会比开2到4个线程高
------解决方案--------------------那可以这样用4个线程来处理数据库操作,用4个线程管理逻辑
------解决方案--------------------我有一个疑问数据库crud操作需要使用线程进行控制吗,不过那个逻辑连接使用不就行了
------解决方案--------------------
个人觉得楼上的比较科学。
主逻辑监听线程:mlistener
子逻辑监听线程; slistener
数据库查询工作相称: dbworker
mlistener得到要执行的主逻辑然后通知dbworker查询。在dbworker查询的时候,mlistener继续监听对主逻辑的请求
dbworker的到查询结后通知slistener来处理相应的子逻辑,slistener通知dbworker进行查询。slistener继续坚挺对子逻辑的请求。dbworker得到查询结构后继续操作
我这个有点像对tcpserver的操作。这种方法比用线程池的方法效率高
------解决方案--------------------学习
------解决方案--------------------具体逻辑不知
不过感觉后面的可以线程池做
------解决方案--------------------
------解决方案--------------------用委托应该可以,当线程内部有主程序感兴趣的事件发生时,通过委托,通知主程序。变主动为被动模式,这样处理起来简单些。
------解决方案--------------------
------解决方案--------------------
http://blog.csdn.net/greystar/archive/2007/08/31/1766363.aspx
建议使用这个来实现
------解决方案-------------------- 帮顶个吧
------解决方案--------------------最好不使用轮询的方式,可以用事件,当线程结束或其他动作,发一个事件通知父线程,父线程就可以处理相关动作,不需要轮询操作的。
------解决方案--------------------学习!
------解决方案--------------------
------解决方案--------------------我看给每一个线程都搞上一个事件(比如一个条件触发,时间触发),自己管理自己就不会乱了吗?主线程在搞上一个判断句就行了,应该是这样的?
------解决方案--------------------路过学习
------解决方案--------------------