线程是cpu执行的最小单位,包括线程ID,程序计数器,寄存器集和栈。和其他同属于一个进程的其他线程共享操作系统资源:代码区,数据区打开文件和信号。
学习之后的目的 :
- 描述操作系统如何管理计算资源(如CPU和内存),描述现代操作系统设计中使用的基本原则。
- 解释现代操作系统的目标和功能,解释内存层次结构和性价比,解释现代操作系统的操作、实现和性能,以及每种操作系统对于复杂用户应用程序的相对优点和适用性。
- 比较和对比操作系统中用于抢占式和非抢占式任务调度的常用算法,如优先级、性能比较和公平共享方案。对比操作系统中的内核模式和用户模式。
- 分析操作系统设计的多种方法之间的关键权衡。
文章目录
基本概念
进程是资源调度,线程是执行调度。
应用:网络服务器
一个核心一个线程
多线程的好处
Responsiveness
可以持续进行响应,不会被阻塞!
Scalability 0 Amdahl’s Law
多线程运行在多个核心上。
Resource Sharing
进程之间只能通过程序员设置共享内存以及消息队列来通信。
属于同一个进程的多个线程可以共享资源。
Economy
线程之间的上下文切换,分配资源,比进程之间更快?
单核并发和多核并行
分时间执行,并发!
分到多个核执行,并发!
并行类型
数据并行
将数据分开,多个线程执行相同的操作。
任务并行
在相同或者不同的数据上,执行不同的操作。
用户线程和内核线程
many-to-one
one-to-one
many-to-many
线程库对比
线程池(重点!)
一个应用有越来越多的线程,分配和管理线程很麻烦。所以产生了一种机制,能够将线程创建和管理的功能从程序员手里转移到编译器以及运行时库。这么一种机制叫做隐式线程或者线程池。
运行原理是:
- 在一个进程启动的时候,创建很多线程,放到线程池里,等待被执行。
- 比如网页服务器,当它某线程接收到请求,从线程池唤醒一个线程,让它处理请求。如果没有可用线程,则等待可用线程。
- 一旦线程完成服务,回到线程池等待更多工作。
Windows线程池 - OpenMP
fork() and exec()
LWP-lightweight process
Linux does not distinguish between processes and threads.