C#ThreadPool与Thread

  1. void Example()
  2. {
  3. // 连接 ProcessFile 方法到线程池.
  4. //注意: ‘a‘ 是一个作为参数的对象
  5. ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessFile), a);
  6. }
  7. private void ProcessFile(object a)
  8. {
  9. // 我被连接到线程池通过 WaitCallback.
  10. }

先贴出这一段线程池调用的方式,Thread类使用比较简单。

Thread thread = new Thread(faction);

thread.start();

因为经常用到线程这一块,之前一直没有考虑线程池这一块的使用,在研究到.NET线程托管方式时候,觉得在可用的情况下,线程池会比Thread使用更安全。

MSDN表述:“线程池经常用在服务器应用程序中,每一个新进来的需求被分配给一个线程池中的线程,这样该需求能被异步的执行,没有阻碍主线程或推迟后继需求的处理。”

但是如果处理量大,或者无限循环的一些函数放入线程池使用的话,可能会导致线程池队列无限等待的情况,所以就我当前理解线程池使用于短时性的一些处理。

像服务器数据侦听等,但是对于视频采集这种高效实时性的处理还是使用Thread。

时间: 2024-11-05 11:28:49

C#ThreadPool与Thread的相关文章

改善C#程序的建议9:使用Task代替ThreadPool和Thread

一:Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: 1: ThreadPool不支持线程的取消.完成.失败通知等交互性操作: 2: ThreadPool不支持线程执行的先后次序: 以往,如果开发者要实现上述功能,需要完成很多额外的工作,现在,FCL中提供了一个功能更强大的概念:Task.Task在线程池的基础上进行了优化,并提供了更多的API.在FCL4.0中,如果我们要编写多线程程序,Task显然已经优于传统的

使用Task代替ThreadPool和Thread

GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=435 一:Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: 1: ThreadPool不支持线程的取消.完成.失败通知等交互性操作: 2: ThreadPool不支持线程执行的先后次序: 以往,如果开发者要

使用ThreadPool代替Thread

线程的空间开销 线程内核对象.包含上下文信息.32位系统占用700字节 线程环境块.包括线程的异常处理链.32位系统占用4KB 用户模式栈.保存方法的参数.局部变量和返回值 内核模式栈.调用操作系统的内核模式函数时,系统会将函数参数从用户模式栈复制到内核模式栈.32位系统占用12KB 线程的时间开销 创建时,系统相继初始化上述内存空间 CLR加载DLL到DLLMain方法,并传送连接标志 线程上下文切换 进入内核模式 将上下文信息保存到正在执行的线程内核对象上 系统获取一个Spinlock,并确

C# 的 Task、Thread、ThreadPool 之间有什么异同?

Thread就是Thread,需要自己调度,适合长跑型的操作. ThreadPool是Thread基础上的一个线程池,目的是减少频繁创建线程的开销.线程很贵,要开新的stack,要增加CPU上下文切换,所以ThreadPool适合频繁.短期执行的小操作.调度算法是自适应的,会根据程序执行的模式调整配置,通常不需要自己调度线程.另外分为Worker和IO两个池.IO线程对应Native的overlapped io,Win下利用IO完成端口实现非阻塞IO. Task或者说TPL是一个更上层的封装,N

Whether Thread Pool is Needed for You?

你到底需不需要内存池? 先问自己两个问题: 是否有很多请求需要重复性的进行处理? 而且每个请求是相互独立的? 你是否需要等待IO操作,或是文件操作? 如果你回答YES,那么你需要一个线程池来帮助你. 我们为什么需要内存池? 通常情况下,IO操作都会需要很长的一段时间才能完成.所以,在一个单线程的应用程序中,在IO操作期间,系统资源都会进行等待.如果使用多线程,效率就会大大的提高.所以我们需要线程池更高效的完成多线程操作. 内存池会有什么样的作用? 一个应用程序其实应该避免频繁的创建和销毁线程.

Python多线程实现方法有几种

目前python多线程实现方式有很多种比如:thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 2.7 版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了 multithreading模块.threading模块里面主要是对一些线程的操作对象化,创建Thread的class.一般来说,使用线程有两种 模式:

多线程的秘密

一.线程的定义  1. 1 进程.应用程序域与线程的关系 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的.进程可以理解为一个程序的基本边界. 应用程序域(AppDomain)是一个程序运行的逻辑区域,它可以视为一个轻量级的进程,.NET的程序集正是在应用程序域中运行的

[转]C#综合揭秘——细说多线程(上)

C#综合揭秘——细说多线程(上) 引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发.其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽可能地减少IIS的压力.并行编程

(译)Asynchronous programming and Threading in C# (.NET 4.5)

原文地址:http://www.codeproject.com/Articles/996857/Asynchronous-programming-and-Threading-in-Csharp-N 介绍: Asynchronous programming and threading is very important feature for concurrent or parallel programming. Asynchronous programming may or may not us