博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#线程池
阅读量:6434 次
发布时间:2019-06-23

本文共 1733 字,大约阅读时间需要 5 分钟。

创建过多的线程会增加操作系统资源占用,并且还要处理资源要求和潜在的占用冲突。并且使用了多线程之后将使代码的执行流程和资源竞争情况变得复杂,稍不留心就会产生bug。

与使用单个线程相比,使用线程池的优点如下:
1.缩短应用程序响应时间。因为在线程池中有线程的线程处于等待分配任务状态,无需创建线程
2.不必管理和维护生存周期短暂的线程,不用在创建时为其分配资源,在其执行完任务之后释放资源。
3.线程池会根据当前系统特点对池内的线程进行优化处理。
宗旨使用线程池的作用是减少创建和销毁线程的系统开销。
.Net中有一个提供线程池管理的类ThreadPool。
ThreadPool是一个静态类,它没有构造函数,对外提供的函数也全部是静态的。其中有一个QueueUserWorkItem方法,有两种重载形式
public static bool QueueUserWorkItem(WaitCallback callBack):将方法排入队列以便执行。此方法在有线程池线程变得可用时执行。
public static bool QueueUserWorkItem(WaitCallback callBack,Object state):将方法排入队列以便执行,并指定包含该方法所用的数据对象。此方法在有线程池线程变得可用时执行。

public class ThreadPoolDemo{  public ThreadPoolDemo(){}  public void Work()  {    ThreadPool.QueueUserWorkItem(new WaitCallback(countProcess));    ThreadPool.QueueUserWorkItem(new WaitCallback(getEnvironmentVariables));  }  private void countProcess(object state)  {    Process[] processes = Process.GetProcesses();    foreach(Process p in processes)    {      Console.WriteLine("Id:{0},ProcessName:{1},StartTime:{2}",p.Id,p.ProcessName,p.StartTime);    }    Console.WriteLine("获取进程信息完毕");  }  private void getEnvironmentVariables(object state)  {    IDictionary list=System.Environment.GetEnvironmentVariables();    foreach(DictionaryEntry item in list)    {      Console.WriteLine("key={0},value={1}",item.Key,item.Value);    }    Console.WriteLine("获取系统变量信息完毕");  }  public void Begin()  {    Work();    Thread.Sleep(5000);    Console.WriteLine("OK");    Console.ReadLine();  }}

 

线程池的缺点:

1、一旦加入到线程池中就没有办法让它停止,除非任务执行完毕自动停止;
2、一个进程共享一个线程池;
3、要执行的任务不能有返回值(当然,线程中要执行的方法也是不能有返回值,如果确实需要返回值必须采用其它技巧来解决);
4、在线程池中所有任务的优先级都是一样的,无法设置任务的优先级;
5、不太适合需要长期执行的任务(比如在Windows服务中执行),也不适合大的任务;
6、不能为线程设置稳定的关联标识,比如为线程池中执行某个特定任务的线程指定名称或者其它属性。

转载于:https://www.cnblogs.com/ecosu/p/4285993.html

你可能感兴趣的文章
python 问题集合
查看>>
豌豆荚工程师谈其新版应用搜索技术
查看>>
螺旋阵(递归和非递归)
查看>>
我的爷爷(知识渊博的下乡知青)
查看>>
jQuery动画连续触发、滞后反复执行解决办法
查看>>
uva 10405 Longest Common Subsequence
查看>>
HttpFileCollection类
查看>>
Eclipse使用常见设置
查看>>
控制台下的字符图像界面
查看>>
c++ 数组形参
查看>>
Memcache的安全
查看>>
KVM/Xen and libvirt: currentMemory, memory and ballooning
查看>>
metasploit 笔记
查看>>
hdu 2845(最大不连续子序列)
查看>>
J2me的异常处理和多线程
查看>>
选择、生成-EA与数据库的交互-by小雨
查看>>
客户网页WIZnet无线解决方案 之 太阳能逆变器
查看>>
CCRepeatForever和CCDelayTime
查看>>
android jni aotf 错误
查看>>
Azkaban的功能特点(二)
查看>>