简介:

一个托管线程的创建需要数千个CPU周期,并且当发生线程切换时也会带来明显的开销。考虑线程的重用,避免不断重复创建新的线程是提高系统效率的一种方式。

线程池是一种提供效率的方式,它创建好一些线程由线程池引擎管理,开发者将需要处理的业务或操作封装成为【工作项】工作项被传递给线程池队列,由线程池中的不同的工作线程挑选并执行。当执行完毕后,线程并不被销毁,而是继续选择其他的工作项。

试想一下,如果有大量的任务需要处理,例如网站后台对于HTTP请求的处理,那是不是要对每一个请求创建一个后台线程呢?显然不合适,这会占用大量内存,而且频繁地创建的过程也会严重影响速度,那怎么办呢?线程池就是为了解决这一问题,把创建的线程存起来,形成一个线程池(里面有多个线程),当要处理任务时,若线程池中有空闲线程(前一个任务执行完成后,线程不会被回收,会被设置为空闲状态),则直接调用线程池中的线程执行(例asp.net处理机制中的Application对象),

下面看个简单的例子:

namespace WpfApplication6
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ConsoleManager.Show();//打开控制台窗口
} private void Window_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 10; i++)
{
ThreadPool.QueueUserWorkItem(m =>
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString());
});
}
Console.Read();
}
}
}

  结果为:

最新文章

  1. SQL Server 存储(1/8):理解数据页结构
  2. easyui DataGrid 工具类之 WorkbookUtil class
  3. Ajax 提交session实效跳转到完整的登陆页面
  4. Gradle for Android
  5. MQTT协议学习笔记
  6. 转:c的回归-云风
  7. E:Package &#39;Vim&#39; has no installation candidate问题解决
  8. 【Xamain 跨平台机制原理剖析】
  9. Asp.net 实现图片缩放 无水印(方法二)
  10. .NET 元数据
  11. google login page
  12. ul li 好友列表
  13. 处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
  14. MySQL基础语法命令
  15. jsp多模块相同数据提交到后台之数据处理
  16. int x ; x+1&lt;x;公式成立
  17. 报错Error configuring application listener of class org.springframework.web.context.ContextConfigLocation
  18. AngularJS移动端页面input无法输入
  19. PID控制器(比例-积分-微分控制器)- IV
  20. Robot Framework+AutoItLibrary使用

热门文章

  1. C# 元数据描述
  2. sqlite+ef+powertools
  3. soapUI工具使用方法、简介、接口测试
  4. MEF 插件式开发之 WPF 初体验
  5. layui switch 开关监听 弹出确定状态转换
  6. drupal7常用函数
  7. loadrunner&#160;运行脚本-Run-time&#160;Settings-ContentCheck简单设置
  8. Linux&#160;学习笔记之超详细基础linux命令&#160;Part&#160;14
  9. linux(乌班图)修改apt下载源
  10. 安装Django(1)