Thread系列——ThreadPool
1.线程池,顾名思义,就是装着若干个线程的池子。
2.出现理由
可以更为有效的使用线程。
如何理解这个“有效”?
(1)我们知道线程在使用之前一般是处于休眠状态的,这样浪费了大量资源创建它,但是却没有使用它,真的是浪费资源。
(2)使用线程时,线程之间的切换也会浪费大量资源。
而线程池,就是为了避免上述两个问题,从而更为有效的利用资源来完成线程之间的调度进而完成工作。
3.线程池工作原理
如上图所示,线程池中维护着若干空闲进程,空闲线程的个数默认为每个处理器25个,最小值是系统的处理器的个数。
当有任务时,不需要程序员另外启动线程,而是通过ThreadPool.QueueUserWorkItem()方法将任务放到线程池中,线程池会将任务交给合适的线程去执行。其中,该方法有两个参数WaitCallBack和Object,分别是线程启动时调用的方法和在方法中要用到的参数。
当线程池中的空闲线程都忙着时,线程池要么创建新的空闲线程,要么等待其他线程结束。
这样设计,可以使任务循环利用线程池中已有的线程,而减少了线程创建和销毁的资源的占用,大大提高了效率。
转载于:https://www.cnblogs.com/ATually/archive/2010/10/21/1857504.html
Thread系列——ThreadPool相关推荐
- 《你不常用的c#之五》:Thread与ThreadPool的内存之战
Thread与ThreadPool使用的时候在内存里对象是如何分布的呢? 今天我们就从内存堆的角度分析下两者. 先上小白鼠代码: <!--<br /><br />Code ...
- C#多线程编程介绍——使用thread、threadpool、timer
C#多线程编程介绍--使用thread.threadpool.timer 在system.threading 命名空间提供一些使得能进行多线程编程的类和接口,其中线程的创建有以下三种方法:thread ...
- 线程(Thread,ThreadPool)、Task、Parallel
线程(Thread.ThreadPool) 线程的定义我想大家都有所了解,这里我就不再复述了.我这里主要介绍.NET Framework中的线程(Thread.ThreadPool). .NET Fr ...
- Thread与ThreadPool的内存之战
Thread与ThreadPool使用的时候在内存里对象是如何分布的呢? 今天我们就从内存堆的角度分析下两者. 先上小白鼠代码: staticvoidMain(string[] args) ...
- C#多线程之Thread,ThreadPool,Task,Parallel
总目录 文章目录 总目录 前言 一.多线程以及与之相关概念 1.基本概念 1)进程 2)线程 3)多线程 2.同步.异步 1)同步方法 2)异步方法 二.Thread 1.线程的使用 1)创建并开启线 ...
- c# Thread、ThreadPool、Task有什么区别,什么时候用,以及Task的使用
c# Thread.ThreadPool.Task有什么区别,什么时候用,以及Task的使用 这三者都是为了处理耗时任务,且都是异步的. Thread Thread就是Thread,需要自己调度,适合 ...
- 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)
一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...
- Thread系列之Thread.Join()
Thread.Join()方法,顾名思义,在一个线程中加入一些东西. MSDN上解释其作用为:阻塞 "调用线程" 直到某个线程结束. 这个翻译过来的解释有点晦涩.举个例子如下: s ...
- Thread系列——Thread.Sleep(0)
转载自:http://www.cnblogs.com/ATually/archive/2010/10/21/1857261.html 线程这一概念,可以理解成进程中的一个小单元.这个单元是一个独立的执 ...
最新文章
- docker 容器占用内存_如何限制Docker容器的内存
- Linux预备知识(三):系统调用-用户态/内核态
- 和为K的子数组—leetcode560
- 为什么技术最牛的码农当不了首席工程师?
- Errors while executing git --version. exitCode=128 errors: fatal: open /dev/null or dup failed: No s
- 数据库-MySQL-数据库和表
- linux 监控java内存_Linux下实用的JAVA内存泄露监控命令及工具
- 【Java】使用springboot框架中的注解@ManyToOne遇到的坑
- 如何使用STM32F4的BootLoader和APP程序
- ssl charles 参数看不到_偷偷告诉你Charles的秘密
- [转]Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言
- time 测试一条命令的执行时间
- Matlab fftshift 详解
- Unity hold on.. importing Assets问题
- canvas绘制五角星
- php pcre 什么用,PHP—PCRE正则表达式性能 - pcre
- excel计数连续负数(正数)
- 期货开户客户经理一对一专业服务指导
- 用Python批量替换多个Word文件中的文字
- 【代码】网易云音乐(周杰伦-晴天)评论的爬取
热门文章
- android 获取monkey日志_安卓app测试之Monkey日志分析
- pb11 打印 自定义纸张_pb自定义纸张(连续走纸)
- base64 java php_利用PHP将图片转换成base64编码的实现方法
- php cachelock,巧用lock解决缓存击穿的解决方案
- C++ static静态成员函数
- Jsoup获取所有链接
- 事物日志恢复 mysql_浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用...
- python3数据科学入门与实战_Python3学习之Python3数据科学入门与实战视频教程
- xposed hook 静态函数_浅谈 Xposed 新概念【模块作用域】
- excel在线_功能强大的纯前端 Excel 在线表格: Luckysheet