没有合适的资源?快使用搜索试试~ 我知道了~
C#_细说多线程(上下)
3星 · 超过75%的资源 需积分: 9 83 下载量 62 浏览量
2017-04-04
13:20:49
上传
评论
收藏 1.16MB DOCX 举报
温馨提示
试读
64页
C#_细说多线程(上下)
资源推荐
资源详情
资源评论
原文链接
引言
本文主要从线程的基础用法, 线程池当中工作者线程与 ! 线程的开发,
并行操作 " #$ 等多个方面介绍多线程的开发。
其中委托的 % & 方法以及回调函数最为常用。
而 ! 线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意
! 线程的操作。特别是在 '("#)* 开发当中,可能更多人只会留意在客户端
使用 '+, 或者在服务器端使用 -."。其实合理使用 ! 线程在通讯
项目或文件下载时,能尽可能地减少 ( 的压力。
并行编程是 /& 中极力推广的异步操作方式,更值得更深入地学习。
希望本篇文章能对各位的学习研究有所帮助,当中有所错漏的地方敬请点评。
0
0
目录
一、线程的定义
二、线程的基础知识
三、以 *.( 方式实现多线程
四、 线程池的工作者线程
五、 线程池的 ! 线程
六、异步 (1.
七、并行编程与 " #$
八、计时器与锁
0
0
0
0
一、线程的定义
1. 1 进程、应用程序域与线程的关系
进程(")是 2. 系统中的一个基本概念,它包含着一个运行程
序所需要的资源。进程之间是相对独立的,一个进程无法访问另一个进程的数
据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的
运行,2. 系统就是利用进程把工作划分为多个独立的区域的。进程可
以理解为一个程序的基本边界。
应用程序域('3)是一个程序运行的逻辑区域,它可以视为一个轻
量级的进程,#)* 的程序集正是在应用程序域中运行的,一个进程可以包含有
多个应用程序域,一个应用程序域也可以包含多个程序集。在一个应用程序域
中包含了一个或多个上下文 ,,使用上下文 就能够把某些特殊对象
的状态放置在不同容器当中。
线程(*.)是进程中的基本执行单元,在进程入口执行的第一个线程被视
为这个进程的主线程。在#)* 应用程序中,都是以 456方法作为入口的,
当调用此方法时系统就会自动创建一个主线程。线程主要是由 "- 寄存器、调
用栈和线程本地存储器(*.77(,*()组成的。"- 寄存
器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存
与数据,*( 主要用于存放线程的状态信息。
进程、应用程序域、线程的关系如下图,一个进程内可以包括多个应用程序域,
也有包括多个线程,线程也可以穿梭于多个应用程序域当中。但在同一个时刻,
线程只会处于一个应用程序域内。
0
0
由于本文是以介绍多线程技术为主题,对进程、应用程序域的介绍就到此为止。
关于进程、线程、应用程序域的技术,在“8综合揭秘——细说进程、应用程
序域与上下文”会有详细介绍。
0
1.2 多线程
在单 "- 系统的一个单位时间(7)内,"- 只能运行单个线程,运
行顺序取决于线程的优先级别。如果在单位时间内线程未能完成执行,系统就
会把线程的状态信息保存到线程的本地存储器(*() 中,以便下次执行时恢
复执行。而多线程只是系统带来的一个假像,它在多个单位时间内进行多个线
程的切换。因为切换频密而且单位时间非常短暂,所以多线程可被视作同时运
行。
适当使用多线程能提高系统的性能,比如:在系统请求大容量的数据时使用多
线程,把数据输出工作交给异步线程,使主线程保持其稳定性去处理其他问题。
但需要注意一点,因为 "- 需要花费不少的时间在线程的切换上,所以过多地
使用多线程反而会导致性能的下降。
0
返回目录
二、线程的基础知识
2.1 System.Threading.Thread 类
(9*.*. 是用于控制线程的基础类,通过 *. 可以控
制当前应用程序域中线程的创建、挂起、停止、销毁。
它包括以下常用公共属性:
属性名称 说明
:,
获取线程正在其中执行的当前上下文。
:*.
获取当前正在运行的线程。
),:,
获取一个 ),:,7对象,该对象包含有关当前线程的各种上下文的信息。
'
获取一个值,该值指示当前线程的执行状态。
%&:.
获取或设置一个值,该值指示某个线程是否为后台线程。
*."*.
获取一个值,该值指示线程是否属于托管线程池。
4.*. .
获取当前托管线程的唯一标识符。
#
获取或设置线程的名称。
"9
获取或设置一个值,该值指示线程的调度优先级。
*.(
获取一个值,该值包含当前线程的状态。
2.1.1 线程的标识符
4.*. . 是确认线程的唯一标识符,程序在大部分情况下都是通过
*.4.*. . 来辨别线程的。而 # 是一个可变值,在默认
时候,# 为一个空值 #:,开发人员可以通过程序设置线程的名称,但这
只是一个辅助功能。
2.1.2 线程的优先级别
#)* 为线程设置了 "9 属性来定义线程执行的优先级别,里面包含 个选
项,其中 # 是默认值。除非系统有特殊要求,否则不应该随便设置线程
的优先级别。
成员名称 说明
可以将 *.7安排在具有任何其他优先级的线程之后。
%#
可以将 *.7安排在具有 #7优先级的线程之后,在具有 7优先级的线程之前。
#
默 认 选 择 。 可 以 将 *. 7 安 排 在 具 有 '#7 优 先 级 的 线 程 之 后 , 在 具 有
%#7优先级的线程之前。
'#
可以将 *.7安排在具有 ;7优先级的线程之后,在具有 #7优先级的线程之前。
;
可以将 *.7安排在具有任何其他优先级的线程之前。
2.1.3 线程的状态
通过 *.( 可以检测线程是处于 -.、(、:7等
等状态,它比 '7属性能提供更多的特定信息。
前面说过,一个应用程序域中可能包括多个上下文,而通过 :,
可以获取线程当前的上下文。
剩余63页未读,继续阅读
资源评论
- IOCRM2018-03-19还可以,只是1.0的东西
小码哥~
- 粉丝: 4
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功