AppDomain 应用程序域
进程内部一个逻辑独立的部分
一个进程中可以存在多个AppDomain
线程可以跨多个AppDomain来执行
AppDomain可以在进程内部创建,但不创建新线程
AppDomain、进程、线程的关系
Subtopic 1
每个AppDomain都可以创建并执行多个线程, 而且能跨域执行线程
托管线程和非托管线程
线程和进程的概念
线程
线程概念
进程有一个由计算机的处理器使用的执行次序,称为线程
单元线程 和 自由线程
单元线程
做后台工作时,都是在其本身的进程中完成
自由线程
使用统一进程的数据执行额外的线程
更准确的讲,线程其实是指向进程的指令流部分的一个指针。 线程实际上不包含指令,只是指出了当前和将来可能要使用的路径, 而这是通过数据和分支判断确定的指令来完成的。
时间片(时间量)的概念
线程工作原理
线程的工作原理
线程的本地存储器TLS Thread Local Storage
寄存器
程序计数器
堆栈指针
调度信息
内存中的地址空间
其他资源的使用信息
中断
概念
中断是一种机制,它能够使CPU指令的正常顺序执行 转向计算机内存中的其他地方, 而不需知道目前正在执行什么程序
中断指令明显地放在指令集中,所以成为软件中断
硬件中断在所执行的指令外部发生
中断处理程序
发生中断的时候,将这个线程的状态存储在TLS中
中断进程示意图
中断进程示意图
TLS并没有存到队列中;而是存在包含这个线程的进程的内存中。 实际保存到队列中的是指向该内存的指针
线程睡眠
是指线程自动退出执行队列一段时间
再次被打包到TLS中
不是放到运行队列的末尾, 放在一个独立的睡眠队列中
时钟中断
线程进入时钟中断与恢复的过程
终止
TLS释放其内存
线程不能自我终止,必须通过另一个线程来终止
优先级
Windows将其分为0~31个级别
数字越大优先级越高
只有系统才能设置为0优先级
Windows系统的用户可以设置1~15的优先级
管理员才能设置15以上的优先级
用户默认优先级是8
线程继承了它所属的进程的优先级
Subtopic 1
进程
内存和资源的物理分离叫做进程
由寄存器定义
每个进程至少有一个执行线程
进程是被物理隔离开了,其他的进程都不能修改其数据
进程的分解
多线程
共享进程的内存空间
.NET中的线程
Thread类
1
Abort()
Topic
2
AllocateDataSlot()
3
AllocateNamedDataSlot()
4
FreeNamedDataSlot()
5
GetData()
6
GetDomain()
7
GetDoaminID()
8
GetHashCode()
9
GetNameDataSlot()
10
Interrupt()
11
Join()
暂停给定的线程,知道当前的线程终止。
12
ResetAbort()
13
Resume()
14
SetData()
15
Sleep()
16
SpinWait()
17
SpinWait()
18
Start()
19
Suspend()
挂起线程,如果线程以挂起,就不起任何作用。
20
Subtopic 1
21
Subtopic 1
Problem
如何复用对象和线程?
不要在循环中创建线程?