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

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

操作系统(英语: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…………,关于这段知识,感兴趣的话,请大家借鉴其余博客,在此笔者不做过多的讲述!

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

相关文章
|
2月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
109 1
|
2月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
1月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
128 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
1月前
|
消息中间件 调度
如何区分进程、线程和协程?看这篇就够了!
本课程主要探讨操作系统中的进程、线程和协程的区别。进程是资源分配的基本单位,具有独立性和隔离性;线程是CPU调度的基本单位,轻量且共享资源,适合并发执行;协程更轻量,由程序自身调度,适合I/O密集型任务。通过学习这些概念,可以更好地理解和应用它们,以实现最优的性能和资源利用。
61 11
|
1月前
|
Java Linux 调度
硬核揭秘:线程与进程的底层原理,面试高分必备!
嘿,大家好!我是小米,29岁的技术爱好者。今天来聊聊线程和进程的区别。进程是操作系统中运行的程序实例,有独立内存空间;线程是进程内的最小执行单元,共享内存。创建进程开销大但更安全,线程轻量高效但易引发数据竞争。面试时可强调:进程是资源分配单位,线程是CPU调度单位。根据不同场景选择合适的并发模型,如高并发用线程池。希望这篇文章能帮你更好地理解并回答面试中的相关问题,祝你早日拿下心仪的offer!
38 6
|
2月前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
2月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
2月前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
86 6
|
2月前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
2月前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
81 5