请教一个多线程的的问题

我用C#写了一个多线程的程序

这个程序开很多端口接收数据,每个端口分配了一个线程接受
每个接受线程对应还有一个执行线程,运行一些需要阻塞的函数

我接受网络的线程用循环的方式察看是否有数据。每个循环用Thread.Suspend()挂起
同样,配套的阻塞进程也在不停循环,每个循环Thread.Suspend()挂起

另外有一个总调度线程MainThread.这个线程在确定其他线程有了新的数据或任务时,用Thread.Resume()恢复线程运行。
MainThread不停运行一个循环。每次Thread.Sleep(1).这样可以在很多时间内进行响应。MainThread进程优先级为最高

这个程序在开启10个以内线程的时候运行时,情况还比较好。实时性很好
随着开启的线程增多,了100个后,程序实时性就不好,有时候个别线程速度缓慢!~
但是!!非常奇怪的是!!!操作系统的速度并不慢!
这个程序占用cpu就算150个线程,也只有不到5%的cpu占用

我首先将所有线程在操作系统的优先级设置为最高,但问题依旧!

我怀疑是多线程锁的问题,于是再开启一个同样的程序只运行2个线程测试,但发现另外这个程序运行的实时性能也很差!~~

我奇怪了~~

后来用高精度计时器分析MainThread.发现在线程很少的时候,很稳定是的2ms一次循环(虽然只让他停止1ms),而线程达到50多个后,MainThread就是稳定的15ms一次循环。这个和DateTime.Ticks的最小误差相同。


现在我认为是很多线程频繁调度而使得程序运行缓慢
不过我还是很疑惑cpu占用很少。这说明操作系统没有尽可能的响应我程序的请求

我该怎么办呢????

 

posted on 2006-05-04 14:11  闪电猪  阅读(436)  评论(2编辑  收藏  举报