碰上个奇怪的问题,我开多线程访问网络,线程数在500以下时,一切正常,超过500时,浏览器就打不开网页了,线程停止后,就又正常了,这是怎么回事?DNS对这个线程数量有什么样的限制?

解决方案 »

  1.   

    好像没有,以前bt软件都有个补丁,能够增加tcp连接数,
      

  2.   

    以前我们做IM时有过一次经历,一个“非正式招聘”的所谓员工(一个认识的教授推荐来的“好”学生)很扯淡地私自(未经过产品经理测试的代码原本都毫不留情地删除掉)在前端程序中加入了一个Timer,Interval为50毫秒,里边就是检测IM窗口跟屏幕的相对位置并处理窗口自动伸缩的功能。结果这个程序的运行速度就立刻变成垃圾一样。好容易我们发动群众找了3天,才找到这个东西。让别人花20分钟重新写了,才解决问题。你的所谓“500个线程”中有一两个有问题就会让系统卡死,根本不可能胡乱地把问题归咎于什么线程数量上。
      

  3.   

    楼上的说法有道理,不过我的每个socket线程都是设置有超时的异步连接,只连接,不传数据,超过2秒自动关掉了,也就是每个线程的执行时间只是2秒中,过了后不管结果怎样就中止,使用的是线程池,这两天测试,在开350个线程时,浏览器上网一点不受影响,再多就很不稳定,超过500个时,浏览器出现超时错误,打不开网页,有时提示DNS错误,程序一中止,马上恢复正常。
    前端也加有timer,这个timer的作用只是更改窗口的一个label数据。
    程序的运行速度很快,cpu和内存占用的都不多,除了这个上网的问题外,没有其他问题。
      

  4.   

    如果是同域访问有问题的话,试试把ServicePointManager.DefaultConnectionLimit设置得大一点,比如1000