当前位置:编程学习 > C#/ASP.NET >>

关于.net线程的问题

最近遇到一个问题,假设我有1000台机器,我需要做一个测试程序来测试这些机器是否可以ping的通。
这个程序中我会对每台机器进行3次ping操作,如果3次均失败我才会认为该机器不在线。
那我应该如何设计我程序的线程
最节省资源并且速度较快的完成这个步骤呢?
请教各位达人。 多线程 .NET --------------------编程问答-------------------- 并发.多线程......

看你测试机,能运行多少并发了. --------------------编程问答--------------------
引用 1 楼 liuqian4243 的回复:
并发.多线程......

看你测试机,能运行多少并发了.


能否说的详细点? --------------------编程问答-------------------- 写一个方法去实现ping操作,参数IP地址等参数。
通过线程池 去创建1000个线程每次调用传入你的0-1000的机器IP地址 --------------------编程问答--------------------
引用 3 楼 adrianEvin 的回复:
写一个方法去实现ping操作,参数IP地址等参数。
通过线程池 去创建1000个线程每次调用传入你的0-1000的机器IP地址


线程池创建的线程的话我无法控制,比如说我要取消都不可以。1000个线程我试过,貌似开销很大,CPU使用率台高了。 --------------------编程问答-------------------- 地址列表加入一个队列,使用N个线程(自己调整数量)并行处理,取数据的时候注意加锁就可以了。
这是很典型的并行处理结构。 --------------------编程问答-------------------- 一个线程最屁要1M,你开1000个线程最屁也要1G内存。
关键是你开1000个线程,他们真的能并发吗?不考虑IO和network的bottleneck吗? --------------------编程问答-------------------- 两个字,队列 --------------------编程问答-------------------- 支持6#

根本不需要那么多线程,最多10个就可以了。 --------------------编程问答--------------------
引用 6 楼 cuit 的回复:
一个线程最屁要1M,你开1000个线程最屁也要1G内存。
关键是你开1000个线程,他们真的能并发吗?不考虑IO和network的bottleneck吗?


求解决方案啊,大神~
--------------------编程问答--------------------
引用 4 楼 yunyuchenNIIT 的回复:
引用 3 楼 adrianEvin 的回复:写一个方法去实现ping操作,参数IP地址等参数。
通过线程池 去创建1000个线程每次调用传入你的0-1000的机器IP地址

线程池创建的线程的话我无法控制,比如说我要取消都不可以。1000个线程我试过,貌似开销很大,CPU使用率台高了。


同时建立1000个线程不是个好做法,可以考虑使用threadpool

另外高版本的.net framework建议采用task来实现,可以支持取消等操作 --------------------编程问答-------------------- 你是为了验证是否可用ping通  也就是ping了 这个线程就执行完成了,然后就释放了。
是用线程池去执行,里面的1000个线程是手动设置最大数量的,并不是1000就是去操作1000的。
如果不是服务器,你可以手动设置最大100个线程执行,去添加1000个会有等待的,剩下900个会等待的。
如果存储IP,可以写个全局变量比如 dictionary<string,bool>
去存储你的IP,是否PING的状态。
如果可以ping通了 也就1S不到就可以PING通,没有PING通,有延时等待了。
所以线程池在ping前100个IP部分通过了,就会线程自动释放了,加载后面的剩下的900个里面的。 --------------------编程问答--------------------
引用 11 楼 adrianEvin 的回复:
你是为了验证是否可用ping通  也就是ping了 这个线程就执行完成了,然后就释放了。
是用线程池去执行,里面的1000个线程是手动设置最大数量的,并不是1000就是去操作1000的。
如果不是服务器,你可以手动设置最大100个线程执行,去添加1000个会有等待的,剩下900个会等待的。
如果存储IP,可以写个全局变量比如 dictionary<string,bo……

关键是我想有停止这个功能,他还未测试完成我可以停止。
线程池中的线程我无法控制,好是好。 --------------------编程问答--------------------

        
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,