线程是cpu执行的最小单位,包括线程ID,程序计数器,寄存器集和栈。和其他同属于一个进程的其他线程共享操作系统资源:代码区,数据区打开文件和信号。
学习之后的目的 :

  • 描述操作系统如何管理计算资源(如CPU和内存),描述现代操作系统设计中使用的基本原则。
  • 解释现代操作系统的目标和功能,解释内存层次结构和性价比,解释现代操作系统的操作、实现和性能,以及每种操作系统对于复杂用户应用程序的相对优点和适用性。
  • 比较和对比操作系统中用于抢占式和非抢占式任务调度的常用算法,如优先级、性能比较和公平共享方案。对比操作系统中的内核模式和用户模式。
  • 分析操作系统设计的多种方法之间的关键权衡。

文章目录

基本概念

操作系统(四)线程_多线程


进程是资源调度,线程是执行调度。

应用:网络服务器

操作系统(四)线程_多线程_02

操作系统(四)线程_线程池_03

一个核心一个线程

操作系统(四)线程_线程池_04

多线程的好处

Responsiveness

可以持续进行响应,不会被阻塞!

Scalability 0 Amdahl’s Law

多线程运行在多个核心上。

操作系统(四)线程_多线程_05

Resource Sharing

进程之间只能通过程序员设置共享内存以及消息队列来通信。
属于同一个进程的多个线程可以共享资源。

Economy

线程之间的上下文切换,分配资源,比进程之间更快?

单核并发和多核并行

分时间执行,并发!

分到多个核执行,并发!

操作系统(四)线程_多线程_06

操作系统(四)线程_数据_07

并行类型

数据并行

将数据分开,多个线程执行相同的操作。

任务并行

在相同或者不同的数据上,执行不同的操作。

用户线程和内核线程

操作系统(四)线程_数据_08

many-to-one

操作系统(四)线程_线程池_09

one-to-one

操作系统(四)线程_多线程_10

many-to-many

操作系统(四)线程_数据_11

线程库对比

操作系统(四)线程_多线程_12

线程池(重点!)

一个应用有越来越多的线程,分配和管理线程很麻烦。所以产生了一种机制,能够将线程创建和管理的功能从程序员手里转移到编译器以及运行时库。这么一种机制叫做隐式线程或者线程池。
运行原理是:

  1. 在一个进程启动的时候,创建很多线程,放到线程池里,等待被执行。
  2. 比如网页服务器,当它某线程接收到请求,从线程池唤醒一个线程,让它处理请求。如果没有可用线程,则等待可用线程。
  3. 一旦线程完成服务,回到线程池等待更多工作。

Windows线程池 - OpenMP

操作系统(四)线程_线程池_13

fork() and exec()

操作系统(四)线程_线程池_14

操作系统(四)线程_数据_15

LWP-lightweight process

操作系统(四)线程_多线程_16

操作系统(四)线程_多线程_17

Linux does not distinguish between processes and threads.