课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
线程问题我们在前几期的文章中给大家介绍过很多次了,而今天我们就再来了解一下,线程中的内核与环境问题,希望通过对本文的阅读,大家对于线程能够有更全面的了解。
1、线程内核对象
Windows线程基础的构件是线程内核对象。对于系统中的每个线程,操作系统都会为它们创建一个内线程内核对象。操作系统使用这些线程内核对象来管理和执行跨系统的线程。这些内核对象同时也是系统保存线程的全部统计信息的位置。下图所示是线程内核对象的重要属性。
2、线程环境
每个线程内核对象都包含一套CPU的寄存器,称之为线程环境。线程环境体现了线程近一次执行时CPU的寄存器的状态。线程的这一套CPU的寄存器保存在CONTEXT结构中。指令指针和栈指针寄存器是线程环境中两个重要的寄存器。栈指针寄存器存储了在线程内当前执行的功能的栈结构的内存起始位置。指令指针寄存器标识了当前需要CPU执行的指令。操作系统在执行线程环境的切换时需要使用内核对象的环境信息。
3、栈
线程的二个重要的组成部分是栈。一旦线程内核对象被创建,系统就会给它分配内存,这些内存用于线程的栈。每个线程用它自己的栈来维护函数的本地变量并在线程执行时传递参数给函数。当一个函数被执行时,它会在栈顶增加参数和本地变量等状态数据,当函数退出时又会相应的移除栈中的这些数据。除此以外,线程的栈还会用于存储函数调用的位置,这样就确保了执行return语句时返回到正确的位置。
4、线程环境块
每个线程都使用的重要的数据结构是线程环境块(TEB)。TEB是在用户模式下分配和初始化。(在用户模式下地址空间可以直接访问应用程序的代码,在内核模式下地址空间不能直接访问应用程序的代码。)TEB会消耗一页内存(当CPUs是x86和x64时是4KB)。
5、线程状态
每个线程在任何特定的时间里都处于一种特定的执行状态。操作系统在线程内核对象的"state"字段中保存线程状态。操作系统使用了这些与性能相关的状态,它们是:
Running(运行状态)-线程正在使用CPU
Blocked(阻塞状态)-线程正在等待输入
Ready(就绪状态)-线程准备执行(非阻塞、非运行)
Exited(退出状态)-线程已退出,但还没销毁
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。