1.线程池,顾名思义,就是装着若干个线程的池子。

2.出现理由

可以更为有效的使用线程。

如何理解这个“有效”?

(1)我们知道线程在使用之前一般是处于休眠状态的,这样浪费了大量资源创建它,但是却没有使用它,真的是浪费资源。

(2)使用线程时,线程之间的切换也会浪费大量资源。

而线程池,就是为了避免上述两个问题,从而更为有效的利用资源来完成线程之间的调度进而完成工作。

3.线程池工作原理

如上图所示,线程池中维护着若干空闲进程,空闲线程的个数默认为每个处理器25个,最小值是系统的处理器的个数。

当有任务时,不需要程序员另外启动线程,而是通过ThreadPool.QueueUserWorkItem()方法将任务放到线程池中,线程池会将任务交给合适的线程去执行。其中,该方法有两个参数WaitCallBack和Object,分别是线程启动时调用的方法和在方法中要用到的参数。

当线程池中的空闲线程都忙着时,线程池要么创建新的空闲线程,要么等待其他线程结束。

这样设计,可以使任务循环利用线程池中已有的线程,而减少了线程创建和销毁的资源的占用,大大提高了效率。

转载于:https://www.cnblogs.com/ATually/archive/2010/10/21/1857504.html

Thread系列——ThreadPool相关推荐

  1. 《你不常用的c#之五》:Thread与ThreadPool的内存之战

    Thread与ThreadPool使用的时候在内存里对象是如何分布的呢? 今天我们就从内存堆的角度分析下两者. 先上小白鼠代码: <!--<br /><br />Code ...

  2. C#多线程编程介绍——使用thread、threadpool、timer

    C#多线程编程介绍--使用thread.threadpool.timer 在system.threading 命名空间提供一些使得能进行多线程编程的类和接口,其中线程的创建有以下三种方法:thread ...

  3. 线程(Thread,ThreadPool)、Task、Parallel

    线程(Thread.ThreadPool) 线程的定义我想大家都有所了解,这里我就不再复述了.我这里主要介绍.NET Framework中的线程(Thread.ThreadPool). .NET Fr ...

  4. Thread与ThreadPool的内存之战

    Thread与ThreadPool使用的时候在内存里对象是如何分布的呢? 今天我们就从内存堆的角度分析下两者. 先上小白鼠代码: staticvoidMain(string[] args)       ...

  5. C#多线程之Thread,ThreadPool,Task,Parallel

    总目录 文章目录 总目录 前言 一.多线程以及与之相关概念 1.基本概念 1)进程 2)线程 3)多线程 2.同步.异步 1)同步方法 2)异步方法 二.Thread 1.线程的使用 1)创建并开启线 ...

  6. c# Thread、ThreadPool、Task有什么区别,什么时候用,以及Task的使用

    c# Thread.ThreadPool.Task有什么区别,什么时候用,以及Task的使用 这三者都是为了处理耗时任务,且都是异步的. Thread Thread就是Thread,需要自己调度,适合 ...

  7. 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)

    一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...

  8. Thread系列之Thread.Join()

    Thread.Join()方法,顾名思义,在一个线程中加入一些东西. MSDN上解释其作用为:阻塞 "调用线程" 直到某个线程结束. 这个翻译过来的解释有点晦涩.举个例子如下: s ...

  9. Thread系列——Thread.Sleep(0)

    转载自:http://www.cnblogs.com/ATually/archive/2010/10/21/1857261.html 线程这一概念,可以理解成进程中的一个小单元.这个单元是一个独立的执 ...

最新文章

  1. docker 容器占用内存_如何限制Docker容器的内存
  2. Linux预备知识(三):系统调用-用户态/内核态
  3. 和为K的子数组—leetcode560
  4. 为什么技术最牛的码农当不了首席工程师?
  5. Errors while executing git --version. exitCode=128 errors: fatal: open /dev/null or dup failed: No s
  6. 数据库-MySQL-数据库和表
  7. linux 监控java内存_Linux下实用的JAVA内存泄露监控命令及工具
  8. 【Java】使用springboot框架中的注解@ManyToOne遇到的坑
  9. 如何使用STM32F4的BootLoader和APP程序
  10. ssl charles 参数看不到_偷偷告诉你Charles的秘密
  11. [转]Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言
  12. time 测试一条命令的执行时间
  13. Matlab fftshift 详解
  14. Unity hold on.. importing Assets问题
  15. canvas绘制五角星
  16. php pcre 什么用,PHP—PCRE正则表达式性能 - pcre
  17. excel计数连续负数(正数)
  18. 期货开户客户经理一对一专业服务指导
  19. 用Python批量替换多个Word文件中的文字
  20. 【代码】网易云音乐(周杰伦-晴天)评论的爬取

热门文章

  1. android 获取monkey日志_安卓app测试之Monkey日志分析
  2. pb11 打印 自定义纸张_pb自定义纸张(连续走纸)
  3. base64 java php_利用PHP将图片转换成base64编码的实现方法
  4. php cachelock,巧用lock解决缓存击穿的解决方案
  5. C++ static静态成员函数
  6. Jsoup获取所有链接
  7. 事物日志恢复 mysql_浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用...
  8. python3数据科学入门与实战_Python3学习之Python3数据科学入门与实战视频教程
  9. xposed hook 静态函数_浅谈 Xposed 新概念【模块作用域】
  10. excel在线_功能强大的纯前端 Excel 在线表格: Luckysheet