聊聊操作系统中 进程 and 线程中哪些事??

news2024/11/26 10:45:24

操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。 [12]操作系统是人与计算机之间的接口,也是计算机的灵魂。-------------摘自百度百科~

对于操作系统OS,其实大家并不怎么陌生,在日常经常接触到,只不过咱们不叫操作系统这么官方的话语~~尴尬!!操作系统本质是一类软件~如:Windows,Android,iOS等软件,主要有两个功能:

  1. 对下:要管理号各种硬件设备~
  2. 对上:要给软件提供稳定的运行环境~

因此,某个软件程序,要想操作某个硬件设备,此时就需要通过操作系统来完成!!

其实操作系统的功能非常多,其中有个和咱们密切相关的功能模板----->进程管理(进程process,任务task)

说白了:一个运行起来的程序就是进程~

.exe是一个可执行文件/一个程序,双击这个.exe文件,程序就会跑起来!在系统中形成一个进程(在任务管理器中可见)

进程管理(为什么要管理进程??进程多了在需要管理)

所谓的进程管理,主要分为两部分:(值得注意的是:主流的操作系统,一般都用C语言来实现的

  1. 描述一个进程:使用结构体/类,把一个进程中有哪些信息,表示出来~
  2. 组织这些程序:使用一定的数据结构,把这些结构体/对象,放到一起~

那么,既然进程中使用了结构体,值得思考一下:进程的结构体里有哪些属性呢??(核心)

  1. pid:每个进程都需要有一个唯一的身份标识~
  2. 内存指针:当前这个进程使用的是哪一部分??--------》进程需要跑起来,就需要消耗一定的硬件资源;如:内存……(进程运行的时候,使用了哪些内存上的资源??
  3. 文件描述符表:文件?硬盘上存储数据往往以文件为单位进行整理的,进程每次打开一个文件就会产生一个“文件描述符”(标识这个被打开的文件),一个进程可能会打开很多文件,对应了一组文件描述符,把这些文件描述符放到一个顺序表这样的结构里,就构成“文件描述符”;(进程运行的时候,使用了哪些硬盘上的资源??

    因此得出:进程的运行需要从操作系统这里申请资源~

    进程是操作系统进行资源分配的基本单位~!!

  4. 接下来这一组属性都是描述和CPU资源相关的属性~(这些属性都是辅助进行进程调度
  • 进程状态:可以简单的认为进程状态主要是这两个:就绪态:该进程已经准备好,随时可以上CPU  ;阻塞态:该进程暂时无法上CPU
  • 进程的优先级:进程之间的调度不一定是“公平的”,有的需要优先调度
  • 进程的上下文:(有点饿抽象,尽可能的去理解):上下文就是描述了当前进程执行到哪里,这样的”存档记录“;进程在离开CPU的时候,就要把当前的运行中间结果“存档”,等到下次进程回来CPU上,再恢复到之前的“存档”,从上次的结果继续往后执行。    所谓的上下文具体是指:进程运行过程中,CPU内部的一系列寄存器的值(对于寄存器有很多种,其中最典型的作用就是保存当前进程执行的中间结果,包括进行运行到哪一条指令?(存档:进程离开CPU,就需要把这些寄存器的值保存到PCB的上下文字段中; 读档:进程下次回来CPU,再把PCB中的值给恢复到寄存器中~)
  • 进程的记账信息:统计了每个进程再CPU上执行了多少次,可以作为调度的参考数据~

对于PCB的属性其实有非常多,如:进程的调度,并发并行,也是非常关键的~~

操作系统往往用双向链表这样的结构来组织PCB

  1. 创建一个进程,就是创建一个链表的节点~
  2. 销毁一个进程,就是把链表的节点给删除了~
  3. 遍历进程列表,就是再遍历链表~

上面所描述的便是进程~,但是在Java圈子中,并不是很鼓励多进程编程,所提倡的是多线程编程~~

Java主要用文件,socket这两种方式完成进程之间的通信~,所以非常鼓励多线程编程,那么,线程又是啥东西呢??接下来跟着笔者看一下多线程是啥东西吧?

聊一聊多线程是啥东西??(Java圈子中常用多线程编程)

首先对于进程而言,进程是比较”重量“的,速度慢/消耗资源多

  • 创建一个进程,成本较高
  • 销毁一个进程,成本也较高
  • 调度一个进程,成本也挺高的

虽然多线程编程可以解决并发编程的问题,但是,不是一个高效的选择~

那么,进程为啥这么重量呢??主要体现在资源分配上,而资源分配往往是一个耗时操作~

相对于进程而言,线程则是一个更轻量的进程(轻量级进程)

约定:一个进程中可以包含多个线程,此时这多个线程都是一个独立可以调度执行的“执行流”(这些执行流之间本身就是并发的),同时,这些线程共用同一份进程的系统资源(意味着:对于线程而言,系统资源是已经分配好了的,创建线程就省下了资源分配的开销~。

进程调度

  1. 为啥要调度??狼多肉少~
  2. CPU是按照并发的方式来执行进程的~
  3. PCB中提供了一些属性:进程的优先级,进程的状态,进程的上下文,进程的记账信息

操作系统引入进程:目的就是为了能够实现多个任务并发执行这样的效果。进程有个重大的问题,比较重量,如果频繁的创建/销毁进程,成本比较高(资源分配)

线程(进程包含线程)

一个进程里可以有一个线程,或者多个线程~

每个线程都是一个独立的执行流,多个线程之间也是可以并发执行的~

多个线程可能在多个CPU核心上同时运行,也可能是在一个CPU核心上通过快速调度来快速运行

操作系统:真正调度的是在调度线程,而不是进程~

进程是操作系统进行调度运行的基本单位~

进程是操作系统资源分配的基本单位~

一个进程中的多个线程之间:共用同一份系统资源

  1. 内存空间
  2. 文件描述符表

只有在进程启动,创建第一个线程的时候,需要花成本去申请系统资源,一旦进程(第一个线程)创建完毕,此时,后续再创建的线程就不必再申请资源了(也不是说完全不申请资源,只是会少很多~),因此,创建/销毁的效率就提高了不少~~

问题:计算机再什么情况下会再创建一个进程??

答:取决于你的代码咋写的!!创建进程和创建线程都是程序员可以控制的~,如:同一个程序,内部想要并发的完成多组任务,此时使用多线程比较合适(如:EV录屏,这是一个程序,同时的录制画面,录制声音………),多个程序之间,此时就是多个进程了(如:EV录屏是一个进程,画图板是另一个进程~)

说了那麽多,找个列子来讲解一下吧~~(滑稽老铁吃100只鸡

1.当只有一个滑稽老铁吃鸡(100只)的时候,效率比较低

2.当有两个房间,两个滑稽老铁,两张桌子,吃100只鸡,互不干扰(看不到对方的进度)

两个房间就相当于两个进程:多个进程吃鸡方式,提高了效率,这种方式,开销比较大,需要多搞一个房间,一张桌子……,此时这两个滑稽老铁看不到彼此的进度~~

3.当只有一个房间,一张桌子,两个滑稽老铁吃鸡(100只)

此时,两个滑稽老铁在一个房间,一个桌子上吃鸡,相当于多线程的方式吃鸡(此时有两个滑稽老铁,两个线程),房间和桌子啥的都是一份,吃鸡的效率大大提升了,这两滑稽老铁之间能看到对方~~

4.提高滑稽老铁的个数~

当滑稽老铁个数提高以后,此时每个滑稽老铁吃的鸡更少,整体的吃鸡效率就更高了~~

其实,只要系统资源是足够的,进程里的线程也是没上限的,当然也不是越多越好~

桌子所提供的空间是固定的(CPU的核心数是固定的),此时进一步提高滑稽老铁的数量,桌子围满了,剩余的滑稽老铁只能在旁边看着,干着急~!此时,程序的效率没有进一步提升(非但没有提升,还有可能会下降-----》进程调度本身也有开销的,桌子就这么大,此时就算是进程调度,调度上了一个滑稽老铁,势必会导致要挤掉一个滑稽老铁),因此总并发程度仍然是固定的~

但是,当出现:某滑稽老铁A是个暴脾气,在挤来挤去的过程中,没有挤上,很生气,直接掀桌~~

此时,这种情况就相当于:一个线程出现异常,此时就很容易把整个进程都带走~,其他进程也就随之被带走了~~

经过上面的滑稽老铁吃鸡的问题,希望大家能够理解进程与线程之间的区别(非常经典的面试题)

进程与线程的区别~

  1. 进程包含线程
  2. 进程有自己独立的内存空间和文件描述符:同一个进程中的多个线程之间,共享同一份地址空间和文件描述符
  3. 进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位
  4. 进程之间具有独立性,一个进程挂了不会影响到别的进程:同一个进程里的多个线程之间,如果一个线程挂了,可能会把整个进程带走,影响到其他线程

谈到JavaSE最高频的问题:让你谈谈多态

谈到数据结构最高频的问题:让你谈谈哈希表~

谈到数据库最高频的问题:让你谈谈索引和事务

谈到系统编程最高频的问题:让你谈谈进程和线程的基本概念和区别~

当每次运行一个.exe程序,如:EV录屏,画图板,都是一个一个的进程,每个进程里可以再并发的执行多个功能,就可以通过多线程来完成了,比如:腾讯会议是一个程序,同时可以录制画面,录制声音,网络传输…………

多进程和多线程再咱们电脑中都是同时存在的,不是说,多线程就完全代替了多进程!如:咱们一个班100多号人,每个人都是一个进程(多进程),每个人的脑子里,可能还有一些小九九,某个同学一边听课,一边想中午吃啥~~(多个线程)

多个进程/多个线程,都是可以并发和并行的~

每个程序打开,至少是一个进程,也可能是有多个进程的(Chrome)

一个进程里可以只有一个线程,也可以包含多个线程

系统自带的任务管理器看不到线程,只能看到进程,若要看到线程,则需要使用其他的第三方工具才能看到:windbg…………,关于这段知识,感兴趣的话,请大家借鉴其余博客,在此笔者不做过多的讲述!

~~~~~~~~~~~~~已完~~~~~~~~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 身份证号码验证

需要编号文件 编号文件部分内容如下 11:北京市 1101:市辖区 110101:东城区 110102:西城区 110105:朝阳区 110106:丰台区 110107:石景山区 110108:海淀区 ...... 编号文件内容比较多 csdn点击 下载地址 java代码如下 import java.io.*; import java.text.ParseException; im…

Win10怎么设置默认看图软件?Win10设置自带看图软件为默认程序操作方法

大小:4.19 GB类别:雨林木风系统 Win10怎么设置默认看图软件?有用户在使用电脑去浏览图片内容的时候,总是使用第三方的看图软件自动打开,不使用系统自带的看图软件来开启图片。那么怎么设置系统自带的看图软件为默认程序…

【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项

本文档主要记录嵌入式C语言在子函数中应用malloc函数的方式,在实际项目中内存管理特别重要 一般在主函数中(main)使用malloc函数,然后在通过free函数进行释放内存,但有时候如果必须在子函数长调用malloc函数该怎样进行…

[HDCTF 2023]YamiYami

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言涉及知识点解题详细过程session伪造反弹shell 前言 从暑假末尾一直搁置,当时卡在反弹shell搞得离flag就差一步。不过最近一两天学习完反弹shell的知…

面试算法-数据结构二

大厂算法面试 1) 图论 2) 大数据 3)动态规划 优秀的算法往往取决于你采取那种数据结构 高级数据结构 1)优先队列 2)图 3)前缀树 4)线段树 5)树状数组 在分析问题的时候&a…

OB Cloud 初体验

文章来源:韩锋频道 韩锋 数据库行业资深从业者,著有《SQL 优化最佳实践》、《数据库高效优化》等数据库相关著作。 OceanBase(下文简称OB) 作为国内一款优秀的分布式数据库,这些年来发展很快,在金融、电商…

UDP协议结构及其注意事项

UDP报文结构 UDP报文结构主要是由两个部分组成的:UDP头部和数据部分。 UDP头部 源端口号:16位字段,指示数据发送方的端口号。目的端口号:16位字段,指示数据接收方端口号。UDP报文长度:16位字段&#xff0…

new HashMap{{put(“a“,“b“)}}

如题,这是什么鬼? Runnable r new Runnable(){Overridepublic void run() {}}; 上面这种写法大家不陌生吧,实际上 就是 定义了一个匿名内部类。 比如:下面这个就是 定义了一个 匿名的Test子类,旁边那个向下的箭头就…

Lua02——应用场景及环境安装

应用场景 是当今游戏领域使用最广泛的脚本语言之一。 搭配 OpenResty 使用,可以扩展Nginx服务器的功能,使用者仅需要编写Lua代码就能轻松完成业务逻辑。 与 Redis 结合。 Adobe Photoshop Lightroom 搭配 Lua 编写插件。 与游戏结合: C/…

DNS域名解析 不同网段的 实验

路漫漫其修远兮,吾将上下而求索 前言 知识应该是 有难宜简,用简单的语言讲清楚,而不是干拧螺丝的事,却说着造火箭的理论。 (尤其是大学讲台上的那一部分人,想想人家的学费,你的工资&#xff…

震惊!可视化大屏都卷成这样了!

如果你还认为可视化大屏只是一个屏幕展示几个数据、图表,那就大错特错了。进入2023年,可视化大屏都内卷到可以实时更新、多维动态、模板一键套用了。 奥威BI系统可视化大屏特点: 1、实时更新 所有取数都基于底层数据,当底层数据…

java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

【Node.js】—基本知识点总结

【Node.js】—基本知识总结 一、命令行常用操作 二、Node.js注意点 Node.js中不能使用BOM和DOM操作 总结 三、Buffer buffer是一个类似于数组的对象,用于表示固定长度的字节序列buffer的本质是一段内存空间,专门用来处理二进制数据 特点:…

第15章_锁: MySQL并发访问相同记录以及从数据操作的类型划分锁(读锁、写锁)

事务的 隔离性 由这章讲述的 锁 来实现。 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在程序开发中会存在多线程同步的问题, 当多个线程并发访问某个数据的时候, 尤其是针对一些敏感数据(订单, 金额), 我们就需要保证这个数据在任何时刻最多只有一个线…

Java Stream 流对象(实用技巧)

目录 一、InputStream & OutputStream 1.1、InputStream 和 OutputStream 一般使用 1.2、特殊使用 1.2.1、如何表示文件读取完毕?(DataInputStream) 1.2.2、字符读取/文本数据读取(Scanner) 1.2.3、文件的随机…

UG\NX二次开发 选择基准平面 UF_UI_select_with_single_dialog

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: 使用UF_UI_select_with_single_dialog函数,选择基准平面。 效果: 代码: #include "me.hpp"//过滤 基准平面 UF_datum_plane_type int InitProcDa…

虹科产品|HK-TrueNAS开放式存储平台被评为数字公益产品

一、HK-TrueNAS 被评为数字公益产品 数字公共产品联盟(Digital Public Goods Alliance)是一项多方利益相关者倡议,旨在促进数字公益(DPG)的发现、开发、使用和投资。数字公共产品的定义是所有人都能免费获取的资源或服…

Linux下的系统编程——进程间的通信(九)

一、进程间通信常用方式 IPC方式: Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核&am…

螺母加工工艺流程

螺母是具有内螺纹并与螺栓配合使用的紧固件,具有内螺纹并与螺杆配合使用用以传递运动或动力的机械零件,是自动化行业中的重要传动零部件之一。大家知道螺母的加工工艺吗? 一般来说,螺母的加工工艺流程包括原材料采购、初加工、调质、精加工、…

vue基础知识六:v-show和v-if有什么区别?使用场景分别是什么?

一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else)&#xff0c;都能控制元素在页面是否显示 在用法上也是相同的 <Model v-show"isShow" /> <Model v-if"isShow" />当表达式为true的时候&#…