IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 操作系统(二)—— 进程管理(2):多线程编程 -> 正文阅读

[系统运维]操作系统(二)—— 进程管理(2):多线程编程

2. 多线程编程

??进程模型假设每个进程是具有单个控制线程的一个执行程序。几乎所有的现代操作系统都允许一个进程包含多个线程。

2.1 概述

  • 每个线程CPU使用的一个基本单元
  • 它包括线程ID、程序计数器、寄存器组和堆栈。它与同一进程的其它线程共享代码段、数据段和其它操作系统资源。
  • 一个进程一般具有多个线程,那么进程能同时执行多个任务。
  • 主线程
int main()
{
	printf("hello world!");
}

??单线程进程和多线程进程如下图所示。

在这里插入图片描述

2.1.1 动机

??一个进程为什么要创建多个线程?
??1. 操作系统创建多个进程比一个进程中创建多个线程的开销大。
??2. 进程间通信和线程间通信更复杂。

2.1.2 优点

??响应性: 如果一个交互程序采用多线程,那么即使部分阻塞或执行冗余操作,它仍然可以继续执行,从而增加对用户的响应程度。
??资源共享: 进程只能通过如共享内存和消息传递之类的技术实现共享资源。而线程默认共享它们所属进程的内存和资源
??经济: 进程创建所需的内存和资源分配非常昂贵。
??可伸缩性: 对于多处理器体系结构,多线程的优点更大,因为线程可在多处理器核上并行运行

2.2 多核编程

  • 早期计算机是单核---->现代计算机是多核
  • 多核编程提供机制,以便更有效的使用这些多个计算核和改进并发性

??下图所示的分别是单核系统和多核系统上的并行执行。

在这里插入图片描述

  • 重点:并行与并发
    并行性: 并行系统可以同时执行多个任务,指多核系统,多个进程同时执行的情况。
    并发性: 并发系统也可以同时执行多个任务,指通过CPU上下文切换,执行多个任务的情况。
  • CPU调度器通过快速切换系统内的进程,以便允许每个进程取得进展,从而提供并行假想

2.3 多线程模型

  • 有两种方法来提供线程支持:用户层的用户线程内核层的内核线程
    ? - 用户线程(user thread):位于内核之上,它的管理无需内核支持。
    ? - 内核线程(kernel thread):由操作系统来直接支持与管理。

2.3.1 多对一模型

在这里插入图片描述

  • 多对一模型: 映射多个用户级线程到一个内核线程。线程管理是由用户空间的线程库来完成,因此效率更高。
  • 如果一个线程执行阻塞系统调用,那么整个进程将会阻塞。
  • 因为任一时间只有一个线程可以访问内核,所以多个线程不能并行运行在多处理核系统上
  • 现代操作系统基本不使用该模型,因为它无法利用多个处理核

2.3.2 一对一模型

在这里插入图片描述

  • 一对一模型: 映射每个用户线程到一个内核线程。
  • 该模型在一个线程执行阻塞系统调用时,能够允许另一个线程继续执行,所以它提供了比多对一模型更好的并发功能
  • 它也允许多个线程并行运行在多处理器系统上
  • 该模型的唯一缺点是:创建一个用户线程就要创建一个相应的内核线程,由于创建内核线程的开销会影响应用程序的性能。

2.3.3 多对多模型

在这里插入图片描述

  • 多对多模型: 多路复用多个用户线程到同样数量或更少数量的的内核线程。
  • 可以创建任意多的用户线程,并且相应内核线程在多处理器系统上并发执行,当一个线程执行阻塞系统调用时,内核可以调用另一个线程来执行。
  • 双层模型: 是多对多模型的变种,仍然多路复用多个用户线程到同样数量或更少数量的内核线程,但也允许绑定某个用户线程到一个内核线程。即同时支持多对多模型和一对一模型。
    ?
    在这里插入图片描述

2.4 线程库

??线程库(thread library)为程序员提供创建和管理线程的API。

2.5 线程池

??主要思想: 在进程开始时创建一定数量的线程,并加到池中等待工作。

??线程池的优点
??? - 用现有线程服务请求比等待创建一个线程更快
??? - 线程池限制了创建的线程数量
??? - 将执行任务从创建任务的机制中分离出来

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:52:22  更:2021-08-31 15:54:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:49:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码