Java进程和线程

  • 2.1内存储器(简称内存)

  • 2.2外存储器(简称外存) 如:硬盘,光盘,U盘软盘……

3.输入设备 如:键盘,鼠标,麦克风……

4.输出设备 如:显示器,音箱,打印机……

注意:有的设备即是输入设备又是输出设备 如:手机的触摸屏(即能点击又能显示出画面),网卡(即能从网上下载数据,又能上传数据到网上)

举一个例子来说明这些硬件之间是如何配合的(数据不是简单的发送和接收,它的内部是十分复杂的)

例如:A在电脑上从QQ上发送一句“hello ”到B的电脑上

在这里插入图片描述

操作系统

======================================================================

1.概念:操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面

2.内核

内核是一个操作系统的核心,主要功能为直接与硬件通信(靠各硬件对应的驱动程序)然后提供一个抽象的接口给应用程序,为应用程序提供一个运行环境并分配程序运行必须的cpu和内存资源

3.操作系统(内核)

1.管理计算机所有的硬件设备

2.管理计算机中的软件资源

4.那么是如何进行管理的呢?(先描述再组织)

4.1.描述:管理一个硬件的时候,都会通过一个类(也可能是一个结构体)来描述这个硬件的所有信息,目前的windows、Linux、mac都是用C语言实现的,那么C语言是里面是使用struct结构体来描述硬件设备和软件资源的

4.2.组织:通过一定的数据结构实现,目的是为了方便进行“增删改查”

了解到一定的操作系统,下面来认识进程和线程

进程的初步认识

=========================================================================

前面我们提到操作系统是管理硬件设备和软件资源,而进程就是操作系统需要管理的软件资源的一部分

我们无时无刻都在跟进程打交道,如:打开我们的任务管理器,我们就可以看到很多的进程

在这里插入图片描述

一个所谓的“程序”一般只一个可执行的文件(如“.exe”文件),如果不双击.exe文件的时候,那么他此时就是一个文件默默的在磁盘(外存)上,如果双击这个文件的时候,操作系统就会把这个exe文件从磁盘加载到内存中,并且CPU开始执行这个程序中的代码,此时执行这个代码的过程就称为“进程process”。(有些操作系统中也管进程叫做“任务task”)

如我们找到qq所在的.exe文件,然后双击,在打开我们的任务管理器我们就可以看到qq已经在运行了

在这里插入图片描述

对于现代的操作系统来说,同一时刻,运行着很多的进程,那么

操作系统是如何管理进程的呢?


1.描述: 每个进程都会创建一个结构体(对象),称为“进程控制块(PCB)”

2.组织: 内核中使用一个双向链表,把所有的PCB对象串到一起

例如:

a)任务管理器如何显示所有的进程信息呢?

遍历内核中的链表,取出每个PCB对象,在打印这个对象的属性就可

b)当创建新的进程的时候,本质上就是创建了一个PCB对象,然后将这个对象加到链表中

c)当销毁已有进程的时候,本质上就是把该进程对应的PCB对象从链表中删除掉了

3.一个进程包含哪些内容(PCB中有什么)

3.1进程持有了一些操作系统的资源

在这里插入图片描述

a)CPU资源(进程中的代码需要在CPU上执行)

b) 内存资源(每个进程都会消耗一定的内存)

c)占据磁盘IO(持有一些文件资源,因为进程可能会在的磁盘上读取数据)

d)占据网络IO(通过网卡来上传/下载一定的数据)

进程 也可以视为是操作系统进行资源分配的基本单位

4.进程的PCB中还有一些其他属性

例如

a)进程id:进程的唯一身份表示,类似你的身份证号码

b)进程的状态

c)进程的优先级

d)进程的上下文信息

e)进程的记账信息

在这里插入图片描述

进程的调度,具体是由操作系统内核中的调度器模块实现的,这里的调度顺序是有一定的规则,但是这个规则比较复杂,当程序员在应用层写代码的时候,是无法预测该进程何时被调度走,下一个进程何时被调度进来的,实现的是“抢占式”策略。

5.时间片

(1)现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。所谓的多任务,就是操作系统可以同时运行多个任务。

(2)操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行

(3)任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。

这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。

6.并发和并行

  • 并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间之内,让多个进程都得以推进,称之为并发。

(微观上一个个执行,宏观上同时进行)

  • 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行。

(微观上就是同时进行)

并发和并行的目的只有一个:提高程序效率

7.线程

7.1线程和进程的关系

如果进程是一个个工厂,那么线程就是工厂里面的一条条流水线

一个进程中可能包含着很多的线程

a)一个进程中可能包含着很多的线程

b)每个线程都有自己要执行的逻辑(相关代码)

c)一个进程中可以同时有多个这样的要执行的逻辑,然后让这些逻辑并发是的执行

d)线程和线程之间,很多资源是共享的,共享的目的是为了编程方便,更方便的实现一些并发任务,而且当一个线程出现bug的时候,只会当前线程所在的进程会被终止,而不会影响到其他进程。如:内存和管理的文件

e)进程和进程之间,资源是相互独立的,为了保证目的的稳定性,不要因为一个进程出现bug而导致所有的进程被终止

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值