只是记录一些笔记供自己参阅,如有勘误望提醒斧正。
由于已经阅读到1.24章了,之前的就不做笔记记录了,而是从1.24章线程开始做记录
线程基本概念
线程是位于进程中、供windows调度的实体 如果没有线程 进程无法运行 。包含以下几种基本要素:
1. 代表进程状态的一系列CPU寄存器内容
2. 两个栈 一个供线程在内核模式下执行使用,另一个供线程在用户模式下执行使用
3. 一个供子系统、运行时库以及DLL使用,名为线程本地存储(Thread-local-storage,TLS)的私有存 储区域
4. 一个名为线程ID的唯一标识符(该ID也是客户端ID的一部分,进行ID和线程ID是从同一个命名空间中生成的,因此绝对不会重叠)
线程同时拥有自己的安全上下文,称为:令牌 主要被多线程服务器应用程序用于模仿所服务的客户端的安全上下文。
线程的上下文
易失和非易失的寄存器以及私有存储区域组合在一起成为了线程的上下文.由于这些信息在不同架构的计算器上运行windows中都是不同的
所以从本质上来说 线程的上下文是由windows的CPU架构决定的。
将执行过程从一个线程切换到另一个线程需要内核调度器的参与,这是一个高开销的操作。
所以windows引入了一个叫 “纤程” 的机制 配合用户模式调度线程(UMS)线程 来共同完成此操作
纤程
纤程可以让应用程序不借助windows内置的基于优先级的调度机制直接安排自己的线程的执行。
纤程有个别名 : “轻量线程”
在调度方面 纤程对内核是不可见的,因为纤程是通过kernel32.dll 在用户模式下实现的。(意思是用户模式有内核调度的能力?牛逼的)
如果需要调用纤程 首先需要调用windows的ConverThreadToFiber函数 该函数是将线程转换为运行中的纤程。
运行中的纤程可以继续调用CreaterFiber创建更多的纤程。
每个纤程可以拥有自己的一组纤程。
纤程只能通过SwitchToFiber函数手动选择后开始执行 退出只需要再调用一次该函数即可。
线程则不是 这是线程与纤程的区别之一。
纤程的I/O受限 执行性能会非常差。
纤程无法在多个进程上并发运行。
用户模式调度线程
· 此模式只适用于windows64位 提供了类似纤程的基本用途。