我在写一个蜘蛛程序,多线程爬网页,并对网页进行分析。
程序运算很多,时刻保持CPU占用率50%以上。
长时间运行时经常会发现程序变为“未响应”,并且CPU占用率变为0,调试时遇到这种情况无法暂停,只能强关。
我的程序有七八个线程用于爬行和分析网页,有一个backgroundworker定时(45秒)更新界面输出消息,以及另一个backgroundworker定时(360秒)保存配置,主线程通常什么也不做。
开始以为是爬行的线程抢占界面线程更新,造成失去响应,于是把那些线程都设为最低优先级、后台线程,但是问题依旧,经常是看会儿网页切回程序就无响应了,如果仅仅是界面无法及时更新的话,其CPU占用率不可能降为0,也就是说其他线程肯定也都被停了。
我怀疑是.Net或是Windows的什么机制导致的?请各位指点一下。
该程序没有用到锁,所以排除死锁可能;也绝对不会是死循环,死循环CPU占用率不会降下来;况且不论死循环、死锁,都不会影响到不相关的线程的。
问一个问题,楼主不用锁,是不是实现了其他同步的机制?貌似很多共享资源
你试着看一下httpReponse那里,我发现只要网络卡住了,即使是异步的,一样会卡死。