五、线程的概念和特点
一、什么是线程,为什么要引入线程
1.在引入线程之前,进程是资源分配的基本单位,也是调度的基本单位。引入线程之后,线程是CPU调度的基本单位。
2.由于切换进程时,需要保存/恢复进程运行环境,还需要切换内存地址空间(更新快表、更新缓冲),由此引入线程,引入线程后,同一个进程内各个线程间并发,不需要切换进程运行环境和内存地址空间,省时省力。
**注意:**从属于不同进程的线程间的切换,也会导致进程的切换,开销也大。
3.引入进程的目的是为了更好的让多道程序并发执行,提高资源利用率和系统吞吐量;而引入线程的目的则是为了减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
二、线程的特性和优点
1.各个进程的内存地址空间相互独立,只能通过请求操作系统内核的帮助来完成进程之间的通信。但同一个进程下的各个线程之间共享内存地址空间,可以直接通过读/写内存空间进行通信。
2.从属于同一个进程各个线程共享进程的所有资源。
3.进程之间的 通信必须请求操作系统服务(CPU要求换到核心态),开销大。同进程下的线程间通信不需要操作系统干预,开销更小。
4.引入线程前,进程既是资源分配的基本单位,也是调度的基本单位。但是引入线程后,进程是资源分配的基本单位,而线程是调度的基本单位。同样线程也有运行态,就绪态和阻塞态。
5.在多核CPU环境下,各个线程也可以分配到不同的CPU上并行的执行。
6.引入线程后,进程是资源分配的基本单位。而线程几乎不拥有资源,只拥有极少量的资源(线程控制块TCB、寄存器信息、堆栈等)
三、本小结总结
五、线程的概念和特点相关推荐
- java 线程池概念、优缺点、应用场景
概念 为什么使用线程池 使用线程池最大的原因就是可以根据系统的需求和硬件环境灵活的控制线程的数量,且可以对所有的线程进行统一的管理和控制,从而提高系统的运行效率,降低系统运行压力:当然了,使用线程池 ...
- 线程(线程基本概念、java实现多线程、使用多线程、线程的生命周期、线程同步、线程死锁)
(一)线程基本概念 一. 程序, 进程, 线程的概念 程序: 使用某种语言编写一组指令(代码)的集合,静态的 进程: 运行的程序,表示程序一次完整的执行, 当程序运行完成, 进程也就结束了 个人电脑: ...
- Java中的线程基础篇-线程基本概念
线程的概念.创建方式.生命周期.优缺点 一.基础知识 1. 进程.线程.协程 1.1 进程 1.2 线程 1.3 协程 2. 串行.并发.并行 2.1 串行 2.2 并发 2.3 并行 二.线程的创建 ...
- 理解五个基本概念,让你更像机器学习专家
理解五个基本概念,让你更像机器学习专家 https://www.jianshu.com/p/ca37ea88a757 摘要: 这篇文章主要讲述了机器学习的相关内容,阐述了机器学习的主要意义和形成过程. ...
- 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )
文章目录 一.引入线程安全概念 二.完整代码示例 一.引入线程安全概念 在上一篇博客 [C 语言]字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 ) ...
- 【Java 并发编程】线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )
文章目录 一.进程与线程 二.并发 三.线程间通信 四.Java 并发 3 特性 一.进程与线程 最开始是没有线程这个概念的 , 一个应用程序就是一个进程 , 应用程序运行时 , 如果还要处理与用户交 ...
- Java高并发和多线程系列 - 1. 线程基本概念
1. 什么是线程? 线程和进程的区别 在了解线程的概念前,我们应该先知道什么是进程? 进程是操作系统的基本概念之一, 它是正在执行的程序实例. * 下面的一些进程的基本概念你可以了解下 ------- ...
- 操作系统(十一)线程的概念和特点
2.1.5 线程的概念和特点 前面我们介绍了进程,并说到进程是程序的一次执行,是调度的基本单位.那么大家来想一下这么一个场景,我打开了QQ.exe,QQ进程便会运行,在这次运行里我想跟同学视频聊天.共 ...
- Python多任务(2.线程的概念以及组成(创建线程的两种方式))
1.线程的概念 线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要CPU进行调度,也就是说线程是CPU调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程. ...
- 进程和线程的概念、区别和联系
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 进程与线程的一个简单解释 在这 ...
最新文章
- 创业公司崛起靠加班?别闹了,早死才靠加班
- 一步一步教你如何用python做词云_一步一步教你如何用Python做词云
- 为什么很难训练深度神经网络?
- iOS-消除CocoaPods内容警告
- Py之imgaug:Python库之imgaug简介、安装、使用方法之详细攻略
- Easy UI Tree操作
- mysql数据库引擎调优
- Sonarqube plugin插件 在使用Sonar-scanner时不能 扫描 file index 动态新生成的文件 解决方案
- JS进阶篇--iscroll.js的使用
- 【语音分析】基于matlab语音短时时域分析【含Matlab源码 559期】
- 倍赛BasicFinder SaaS数据标注工具解决6个实操问题
- js基础之六种继承方式
- Excel VBA小程序 -使用VBA实现VLOOKUP函数查询?
- 2022-06-08 iPhone快捷指令自动切换壁纸
- PS—制作 抖音 图标
- Android7.1.1新增Shortcuts快捷方式,让App更加快捷方便
- prisma2.0和nexus搭建graphql后端(2)—nexus
- 我的翻译--针对Outernet卫星信号的逆向工程
- 在windows系统中安装Sulley
- Android 新版个税计算小demo程序
热门文章
- mongodb中简单的根据时间过滤进行查询
- Anaconda | CentOS7 -解决 Python2和Python3共存
- RDKit | 比较化合物并通过PCA可视化化学空间
- Amber18安装(非root用户)
- Bio+IT 爱好者社区,欢迎你!
- 零基础入门学习 Python(4)条件分支、while循环、逻辑连接符、引入外援
- iMeta:青岛大学苏晓泉组开发跨平台可交互的微生物组分析套件PMS(全文翻译,PPT,视频)...
- go监听mysql事件更新,有没有一种方法可以“监听”数据库事件并实时更新页面?...
- R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator )
- R语言ggplot2可视化分面图(facet_wrap)、使用size参数自定义设置分面图标签栏(灰色标签栏)中的标签文本的字体大小