C#线程系列讲座(3):线程池和文件下载服务器

如果设计一个服务器程序,每当处理用户请求时,都开始一个线程,将会在一 定程序上消耗服务器的资源。为此,一个最好的解决方法就是在服务器启动之前 ,事先创建一些线程对象,然后,当处理客户端请求时,就从这些建好的线程中 获得线程对象,并处理请求。保存这些线程对象的结构就叫做线程池。

在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下, ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net framework版本的不同,这些数据可能会有变化)。下面是一个用C#从线程池获得 线程的例子:

private static void execute(object state){    Console.WriteLine(state);      }static void Main(string[] args){

int workerThreads;    int completionPortThreads;    ThreadPool.GetMaxThreads(out workerThreads, out completionPortThreads);    Console.WriteLine(workerThreads);    Console.WriteLine(completionPortThreads);        ThreadPool.QueueUserWorkItem(execute,"线程1");   // 从线程池中得到一个线程,并运行execute    ThreadPool.QueueUserWorkItem(execute, "线程2");    ThreadPool.QueueUserWorkItem(execute, "线程3");    Console.ReadLine();}

下图为上面代 码的运行结果。

要注意的是,使用ThreadPool获得的线程都是后台线程。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 线程
, c# 线程池
, console
, execute
, 多线程线程c#
, 请求c#下载
, 多线程.netwindows 服务c#
, c#线程
, 一个
threadpool
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-07-31 17:38:04

C#线程系列讲座(3):线程池和文件下载服务器的相关文章

C#线程系列讲座(2):Thread类的应用

一.Thread类的基本用法 通过System.Threading.Thread类可以开始新 的线程,并在线程堆栈中运行静态或实例方法.可以通过Thread类的的构造方法 传递一个无参数,并且不返回值(返回void)的委托(ThreadStart),这个委托的 定义如下: [ComVisibleAttribute(true)] public delegate void ThreadStart() 我们可以通过如下的方法来建立并运行一个 线程. using System;using System.

C#线程系列讲座(1):BeginInvoke和EndInvoke方法

开发语言:C#3.0 IDE:Visual Studio 2008 本系列教程主要包括如下内容: 1. BeginInvoke和EndInvoke方法 2. Thread类 3.线程池 4.线程同步基础 5.死锁 6.线程同步的7种方法 7.如何在线程中访问GUI组件 一.线程概述 在操作系统中一个进程至少要包含一个线程,然后,在某些时候需要在同一个进程中同时执行多项任务,或是为了提供程序的性能,将要执行的任务分解成多个子任务执行.这就需要在同一个进程中开启多个线程.我们使用C#编写一个应用程序

C#线程系列讲座(5):同步技术之Monitor

在上一讲介绍了使用lock来实现线程之间的同步.实际上,这个lock是C#的一 个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类.先看看下 面的C#源代码: public static void MyLock(){ lock (typeof(Program)) { }} 上面的 代码通过lock语句使MyLock同步,这个方法被编译成IL后,代码如图1所示. 图1 从上图被标注的区域可以看到,一条lock语句被编译成了调 用Monitor的Enter和Exit方法.Mo

C#线程系列讲座(4):同步与死锁

虽然线程可以在一定程度上提高程序运行的效率,但也会产生一些副作用.让 我们先看看如下的代码: class Increment { private int n = 0; private int max; public Increment(int max) { this.max = max; } public int result { get { return n; } set { n = value; } } public void Inc() { for (int i = 0; i < max;

RX系列五 | Schedulers线程控制

RX系列五 | Schedulers线程控制 在我们上一篇文章中的,我们的小例子里有这么一段代码 //网络访问 .observeOn(Schedulers.io()) 事实上,我们在使用网络操作的时候,便可以控制其运行在哪个线程中,而Schedulers类,有四个方法,分别是 Schedulers.immediate(); Schedulers.newthread(); Schedulers.io(); Schedulers.computation(); 以及RxAndroid中的Android

Java线程系列

Java线程:线程私有变量 Java线程:深入ThreadLocal Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新

Java线程:新特征-线程池

有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类,熟悉这部分API特征是一项艰难的学习过程.目前有关这方面的资料和书籍都少之又少,大所属介绍线程方面书籍还停留在java5之前的知识层面上. 当然新特征对做多线程程序没有必须的关系,在java5之前通用可以写出很优秀的多线程程序.只是代价不一样而已. 线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理.当有线程任务时,从

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现   (6):EF上下文实例管理   (7):DBSession的封装 前言:通过上篇博客我们完成了对DbSession的代码编写,DbSession就相

JDK5.0新特性系列---11.3线程 锁Lock

  import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.Reent