Thread and ThreadPool
C#中Thread与ThreadPool的比较
Thread类,一次使用一个线程,来创建和删除线程。这种方式建立和删除线程是很昂贵的(cpu密集型)。
Threadpool类 对于大多数的情况下是使用与对系统控制比较少的情况下 ,不管是线程的创建暂停和删除都是系统自动完成的。
CLR包含一个内置的线程池,供应用程序使用。这个线程池可以通过ThreadPool类访问。
ThreadPool类会在线程的托管池中重用已有的线程。使用完线程后,线程就会返回线程池,供以后使用。ThreadPool有25个可用的线程(每个处理器)。
使用ThreadPool类比Thread类创建线程简单的多。但是,在确定是用ThreadPool类还是Thread类创建线程时,考虑如下问题:
在达到如下目标时,应使用ThreadPool类:
要以最简单的方式创建和删除线程;
应用程序使用线程的性能要优先考虑。
在达到如下目标时,应使用Thread类:
要控制所创建线程的优先级;
希望所使用的线程维护其标识,该标识要与线程一起进行各种操作,经过许多不同的时间段;
所使用的线程的寿命较长。
ThreadPool的调用需要调用ThreadPool.QueueUserWorkItem()方法。调用这个方法有两种方式。
一是: ThreadPool.QueueUserWorkItem(new WailtCallback(StartMethod));
二是: ThreadPool.QueueUserWorkItem(StartMethod);
注:StartMethod()为要执行的方法.
Thread and ThreadPool的更多相关文章
- C#中Thread与ThreadPool的比较
最近同事在编写一个基于UPD RTP协议的通信软件,在处理接收Listen时,发现了一个问题到底是用Thread还是ThreadPool呢? 我看同事的问题比较有典型性,还是做以整理培训一下吧 Thr ...
- 多线程异步编程示例和实践-Thread和ThreadPool
说到多线程异步编程,总会说起Thread.ThreadPool.Task.TPL这一系列的技术.总结整理了一版编程示例和实践,分享给大家. 先从Thread和ThreadPool说起: 1. 创建并启 ...
- 线程(Thread,ThreadPool)、Task、Parallel
线程(Thread.ThreadPool) 线程的定义我想大家都有所了解,这里我就不再复述了.我这里主要介绍.NET Framework中的线程(Thread.ThreadPool). .NET Fr ...
- Thread与ThreadPool的内存之战
Thread与ThreadPool使用的时候在内存里对象是如何分布的呢? 今天我们就从内存堆的角度分析下两者. 先上小白鼠代码: static void Main(string[] args) ...
- NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL
.NET 异步多线程,THREAD,THREADPOOL,TASK,PARALLEL,异常处理,线程取消 今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主 ...
- C# 的 Task、Thread、ThreadPool 之间有什么异同?
Thread就是Thread,需要自己调度,适合长跑型的操作. ThreadPool是Thread基础上的一个线程池,目的是减少频繁创建线程的开销.线程很贵,要开新的stack,要增加CPU上下文切换 ...
- C#多线程编程介绍——使用thread、threadpool、timer
C#多线程编程介绍——使用thread.threadpool.timer 在system.threading 命名空间提供一些使得能进行多线程编程的类和接口,其中线程的创建有以下三种方法:thread ...
- Thread和ThreadPool
Thread和ThreadPool 说到多线程异步编程,总会说起Thread.ThreadPool.Task.TPL这一系列的技术.总结整理了一版编程示例和实践,分享给大家. 先从Thread和Thr ...
- Thread、ThreadPool、Task、Parallel、Async和Await基本用法、区别以及弊端
多线程的操作在程序中也是比较常见的,比如开启一个线程执行一些比较耗时的操作(IO操作),而主线程继续执行当前操作,不会造成主线程阻塞.线程又分为前台线程和后台线程,区别是:整个程序必须要运行完前台线程 ...
随机推荐
- jquery设置自己的标识符
$(function(){ var $jc=jQuery.noConflict(); $jc('.main').css({'margin':'0 auto'}) })
- [整理]Matlab之中心平滑滤波
滑动平均(moving average):在地球物理异常图上,选定某一尺寸的窗口,将窗口内的所有异常值做算术平均,将平均值作为窗口中心点的异常值.按点距或线距移动窗口,重复此平均方法,直到对整幅图完成 ...
- python ide ---wing 注册机
注册机脚本代码如下: import sha import string BASE2 = '01' BASE10 = '0123456789' BASE16 = '0123456789ABCDEF' B ...
- python学习之——splinter介绍
Splinter是什么: 是一个用 Python 编写的 Web 应用程序进行验收测试的工具. Splinter执行的时候会自动打开你指定的浏览器,访问指定的URL,然后你所开发的模拟的任何行为,都会 ...
- [转] AIX lv 4k偏移量
转自:http://www.aixchina.net/Question/29969 前几天在客户数据库做巡检的时候,在警告日志中发现有如下警告:引用WARNING: You are creating ...
- 计算软键盘的高度然后确定自定义的View的具体位置
singleTouchView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayout ...
- java多线程详解(8)-volatile,Atomic比较
在变成过程中我们需要保证变量的线程安全,在java中除了使用锁机制或者Threadlocal等保证线程安全,还提供了 java.util.concurrent.atomic.Atomic*(如Atom ...
- HR开发 SuccessFactors与HCM数据映射
SuccessFactors Employee Central ----->> HCM 增强点 ES_PAOCF_EC_TOOLS HCM ----->> SuccessFac ...
- [问题记录.VisualStudio]TFS项目映射问题解决
[问题描述] Visual Studio 2013 中打开用TFS源码管理的项目失败! 1.对特定的项目,不管是通过解决方案文件(.sln)还是项目文件(.csproj)打开,都显示项目无法加载. 2 ...
- bc:linux下命令行计算器
在linux下,存在一个命令行的计算器:bc.该程序一般随发行版发布. bc计算器能够执行一些基本的计算,包括+,-,×,\,%. 这些计算不经针对十进制,还可以使用二进制,八进制,十六进制,并且可以 ...