一.线程
操作系统使用进程将他们正在执行的不同应用程序分开。线程是操作系统分配处理器时间的基本单元,并且进程中可以有多个线程同时执行代码。每个线程都维护异常处理程序,调度优先级和一组系统用于在调度该线程前保存线程上下文的结构。线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息,包括线程的CPU寄存器组合堆栈。
.Net Framework将操作系统进程进一步细分为由System.AppDomain表示的,称为应用程序域的轻量托管子进程。一个或多个托管线程(由System.Threading.Thread表示)可以在同一个托管进程中的一个或任意数目的应用程序域中运行。虽然每个应用程序域都是用单个线程启动的,但该应用程序域中的代码可以创建附加应用程序域和附加线程。其结果是托管线程可以在同一个非托管进程中的应用程序域之间自由移动;您可能只有一个线程在若干应用程序域之间移动。
支持抢先多任务处理的操作系统可以创建多个进程中的多个线程同时执行的效果。它通过以下方式实现这一点:在需要处理器时间的线程之间分割可用处理器时间,并轮流为每个线程分配处理器时间片。当前执行的线程在其时间片结束时被挂起,而另一个线程继续运行。当系统从一个线程切换到另一个线程时,它将保存被抢先的线程的线程上下文,并重新加载线程队列中下一个线程的已保存线程上下文。
时间片的长度取决于操作系统和处理器。由于每个时间片都很小,因此即使只有一个处理器,多个线程看起来似乎也是在同时执行。这实际上就是多处理器系统中发生的情形,在此类系统中,可执行线程分布在多个可用处理器中。
多线程优点
单个应用程序域可以使用多个线程完成以下任务
通过网络和Web服务器和数据库通信
执行占用大量时间的操作
区分具有不同优先级的任务。例如,高优先级线程管理时间关键的任务,低优先级线程执行其他任务。
使用户界面可以在将时间分配给后台任务时仍能快速做出响应。
多线程缺点
线程处理还具有在设计应用程序时要考虑的资源要求和潜在冲突。这些资源要求如下所述: 1. 系统将为进程,AppDomain对象和线程所需的上下文信息使用内存。因此,可以创建的进程,AppDomain对象和线程的数目可受到可用内存的限制。 2. 跟踪大量的线程将占用大量的处理器时间。如果线程过多,则其中大多数线程都不会产生明显的进度。如果大多数当前线程处于一个进程中,则其他进程中的线程的调度频率就会很低。 3. 使用许多线程控制代码执行非常复杂,并可能产生许多bug。 4. 销毁线程需要了解可能发生的问题并对那些问题进行处理。 5.
二.托管线程池
1.托管线程池定义
定义: ThreadPool类为你的应用程序提供一个受系统管理的辅助线程池,从而使你能够专注于应用程序任务,而非线程管理。如果有需要后台处理的短任务,托管的线程池则为利用多个线程的简便方法。 用途:.Net FrameWork 将线程池用于多种用途,包括异步I/O完成,计时器回调,注册的等待操作,使用委托的异步方法调用和System.Net套接字连接。
2.托管线程池特征
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26