[OS] 线程相关知识点
操作系统中引入进程的目的,是为了描述和实现多个程序的并发执行,以改善资源利用率以及提高系统吞吐量。
那为什么还需要引入线程呢?下面我们先来回顾一下什么是进程:
进程有两个基本属性:
·资源的拥有者:给每个进程分配一虚拟地址空间,保存进程影像,控制一些资源(文件、I/O设备),有状态、优先级、调度。
·调度单位:进程是一个执行轨迹。
这两个属性构成了进程并发执行的基础。
因此使用进程来实现并发运行时,系统则必须完成以下操作:
创建进程:
当进程被创建时,系统要为它分配PCB表及其它必要的资源,如内存等。
撤销进程:
当进程被撤消时,系统要收回这些资源及PCB表等,因此系统必须付出一定的开销。
进程切换:
当进程运行时,进程的切换现象更会大量存在,由于要保留当前执行进程的CPU现场和为选中执行的进程重布现场,更需较大的开销。
缺点:时间空间开销大,限制并发程度的提高
线程的引入目的:减少进程切换和创建开销,提高执行效率和节省资源。
实现:将进程的资源申请和调度属性分开。即进程作为资源的申请和拥有者,但不作为调度的基本单位,这样,就产生了线程的概念。
线程:是进程中的一个实体,是独立调度和分派的基本单位。
从下图可以看出单线程进程和多线程进程的区别:
从上图可以看出线程的一些基本性质:
线程是CPU运行的一个基本单元,包括程序计数器、寄存器集和栈空间。
一个线程与它的对等线程共享代码段、数据段以及操作系统资源。
一个传统重量级的进程只有单个控制线程。
多线程编程的好处:
·响应度高:如果一个交互程序采用多线程,那么即使其部分阻塞或执行较冗长的操作,该程序仍能继续执行,从而增加了对用户的响应程度。例如,多线程Web浏览器在用一个线程装入图像时,能通过另一个线程与用户交互。
·资源共享:线程默认共享它们所属进程的内存和资源。代码和数据共享的优点是它能允许一个应用程序在同一地址空间有多个不同的活动线程。
·经济:进程创建所需的内存和资源的分配比较昂贵。由于线程能共享它们所属进程的资源,所以创建和切换线程会更为经济。
·多处理器体系结构的利用:多线程的优点之一是能充分使用多处理器体系结构,以便每个进程能并行运行在不同处理器上。不管有多少CPU,单线程进程只能运行在一个CPU上。在多CPU上使用多线程加强了并发功能。
用户级线程和内核级线程区别:
·线程的调度与切换时间
用户级线程的切换通常发生在一个应用进程的多个线程之间,无须通过中断进行OS的内核,且切换规则也简单,因此其切换速度特别快。而内核级线程的切换时间相对比较慢。
·系统调用
用户级线程调用系统调用时,内核不知道用户级线程的存在,只是当作是整个进程行为,使进程等待并调度另一个进程执行,在内核完成系统调用而返回时,进程才能继续执行。而内核级线程则以线程为单位进行调度,当线程调度系统调用时,内核将其作为线程的行为,因此阻塞该线程,可以调度该进程中的其他线程执行。
·线程执行时间
如果用户设置了用户级线程,系统调用是以进程为单位进行的,但随着进程中线程数目的增加,每个线程得到的执行时间就少。而如果设置的是内核级线程,则调度以线程为单位,因此可以获得良好的执行时间。
多线程问题
·系统调用fork()和exec()
如果程序中的一个线程调用fork(),新进程会复制所有线程,还是单个线程?
Case 1:如果fork()之后立即调用exec(),没有必要复制所有线程。因为exec参数所指定的程序会替换整个过程。
Case 2:不调用exec(),应该复制所有线程。
·取消
线程取消就是在线程结束前终止线程的任务。
比如多线程并发执行搜索数据库,其中一个获取到结果,那么其他的线程就可以取消。
实现线程取消有两种方法:
(1)异步取消:一个线程立即终止目标线程。
(2)延迟取消:允许目标线程不断地检查它是否应终止,允许目标线程有机会以有序的方式终止自己。
·信号处理
信号在UNIX系统中用来通知进程某个特定的事件发生了。
信号都具有相同的模式:
(1)信号是由特定事件的发生所产生的。
(2)产生的信号要发送到进程。
(3)一旦发送,信号必须加以处理。
在单线程程序中信号处理比较直接,信号总是发送给进程;但对于多进程程序,发送信号就比较复杂,因为进程可能有多个线程,因此,信号发送有以下选择:
(1)发送信号到信号所应用的进程。
(2)发送信号到进程内的每个线程。
(3)发送信号到进程内的某些固定线程。
(4)规定一个特定线程以接收进程的所有信号。
发送信号的方法依赖于产生信号的类型。
·线程池
线程池的主要思想是在进程开始时创建一定数量的线程,并放入到池中以等待工作。当服务器收到请求时,它会唤醒池中的一个线程(如果有可用的线程),并将要处理的请求传递给它。一旦线程完成了服务,它会返回到池中再等待工作。如果池中没有可用的线程,那么服务器会一直等待直到有空线程为止。
使用线程池的优点:
(1)通常用现有线程处理请求要比等待创建新的线程要快。
(2)线程池限制了在任何时候可用线程的数量。这对那些不能支持大量并发线程的系统非常重要。
·线程特定数据
允许每一个线程有自己的数据副本。
·调度程序激活
[OS] 线程相关知识点的更多相关文章
- [OS] 进程相关知识点
进程概念: 1.程序在执行中 2.一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位. 进程与程序的差别: ·进程----动态, 程序----静态 ·进程 ...
- (day30)GIL + 线程相关知识点
目录 昨日内容 进程互斥锁 队列 进程间通信 生产者与消费者模型 线程 什么是线程 为什么使用线程 创建线程的两种方式 线程对象的属性 线程互斥锁 今日内容 GIL全局解释器锁 多线程的作用 计算密集 ...
- [OS] 死锁相关知识点以及银行家算法详解
因此我们先来介绍一下死锁: 死锁特征 当出现死锁时,进程永远不能完成,并且系统资源被阻碍使用,阻止了其他作业开始执行.在讨论处理死锁问题的各种方法之前,先深入讨论一下死锁的特征. ·必要条件 (1)互 ...
- IOS开发涉及有点概念&相关知识点
前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...
- java线程相关
java线程相关 java 线程 1 线程的状态 This is an example of UML protocol state machine diagram showing thread sta ...
- 浅谈C#中的 async await 以及对线程相关知识的复习
C#5.0以后新增了一个语法糖,那就是异步方法async await,之前对线程,进程方面的知识有过较为深入的学习,大概知道这个概念,我的项目中实际用到C#异步编程的场景比较少,就算要用到一般也感觉T ...
- Python OS模块重要知识点
Python OS模块重要知识点 这几点很重要,主要是关于文件路径,我之前踩了很多坑,今天总结一下,方便以后能够避免与path相关的各种坑! 1,首先我们想获取某个文件夹下面的所有文件夹以及文件(不包 ...
- 【Java基础】String 相关知识点总结
String 相关知识点总结 字符串的不可变性 概述 String 被声明为 final,因此它不可继承 在 Java8 中,String 内部使用 char 数组存储数据 public final ...
- UITableView相关知识点
//*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...
随机推荐
- ubantu忘记登录密码怎么办?(ubantu16.04)
刚知道有虚拟机的时候为了那啥(咳咳),花了好几天的时间装了很多的操作系统,像什么os x.kali.red hat.以前的win7什么的,甚至还有一个Android的虚拟机……扯偏了,然后最近学习到了 ...
- 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单
调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...
- 2 进程multiprocessing [mʌltɪ'prəʊsesɪŋ] time模块
1.multiprocessing模块 multiprocessing模块就是跨平台版本的多进程模块. multiprocessing模块提供了一个Process类来代表一个进程对象, 2.Proce ...
- IOI 2017 Practice Contest mountains
Mountains 题面 题意: 选最多的点使得两两看不见. 分析: 分治,solve(l,r)为区间[l,r]的答案.那么如果不选最高点,分治两边即可,选了最高点,那么在最高点看不见的区间里分治. ...
- JS学习 用 arguments 对象模拟函数重载
用 arguments 对象判断传递给函数的参数个数,即可模拟函数重载: function doAdd() { if(arguments.length == 1) { alert(arguments[ ...
- JavaScript事件及BOM和DOM
1. 事件 1.1 事件绑定 # 写在html元素中<button onclick="code..."></div># 把事件当做元素对象的方法btnEl ...
- 会声会影X10x9x8最新教程
会声会影X10x9x8最新最全教程,全部都是干货,包含素材的,下载地址:百度网盘, https://pan.baidu.com/s/1AyVS-C_VcTEz_ir70u08xQ 以下为部分内容截图: ...
- 浅谈如何提高自动化测试的稳定性和可维护性 (pytest&allure)
装饰器与出错重试机制 谈到稳定性,不得不说的就是“出错重试”机制了,在自动化测试中,由于环境一般都是测试环境,经常会有各种各种的抽风情况影响测试结果,这样就为测试的稳定性带来了挑战,毕竟谁也不想自己的 ...
- Logistic回归和SVM的异同
这个问题在最近面试的时候被问了几次,让谈一下Logistic回归(以下简称LR)和SVM的异同.由于之前没有对比分析过,而且不知道从哪个角度去分析,一时语塞,只能不知为不知. 现在对这二者做一个对比分 ...
- 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第一道——最佳路径
题目 给定一个 n*m 的矩阵 A ,矩阵中每一个元素为一个十六进制数.寻找一条从左上角都右下角的路径,每次只能向右或者向下移动, 使得路径上所有数字之积在 16 进制下的后缀 0 最少. 输入描述: ...