线程是CPU利用率的基本单位;它包括线程ID、程序计数器(PC)、寄存器集和堆栈。
它与属于同一进程的其他线程共享它的代码段、数据段和其他操作系统资源,如打开的文件和信号
多线程编程需要考虑的问题:
1.任务的划分(独立性)
2.不出现饥饿现象(每个线程都有活儿干)
3.数据的划分(同1)
4.数据的交互(线程的同步)
5.测试难
用户线程和内核线程的映射模型:一对一,一对多,多对多。
管理线程的API:Pthreads,Java Threads
隐式的线程调用:线程池,ForkJoin等。
事件产生的信号量给进程中的哪个线程?
线程的取消:中断状态的设置,查询;线程使用的资源的释放。
线程的本地存储(TLS)
调度机制:user thread Library-------------LWP(中间数据结构,lightweight process,类似于中介)-----------Kernal
线程的组件:
windows 下:
线程ID唯一识别线程
寄存器 设置处理器的状态
程序计数器
线程运行在用户模式时的用户堆栈 以及,在内核模式 下的内核堆栈
一个私有的存储区域由 使用的各种运行时库和动态链接库(dll) 组成
寄存器集、堆栈和私有存储区域称为线程上下文
ETHREAD—线程的执行块 KTHREAD—内核线程块 TEB—线程环境块
ETHREAD的 关键组件包括一个指向线程所属进程的指针和线程启动控件的程序地址
ETHREAD还包含一个指向相应的指针KTHREAD。
KTHREAD包括 线程的调度和同步信息,一个内核堆栈,一个指向TEB的指针
TEB包含 线程标识符、用户模式堆栈和用于线程本地存储的数组。