Java进程和线程

认识进程和线程,那我们首先必须认识冯诺伊曼体系结构

冯诺伊曼体系结构

描述了一台计算机硬件上的基本结构
他提出计算机中存储和表示数据都是通过二进制来表示的
在这里插入图片描述

风诺依曼体系结构由四大部分组成:
1.(CPU)中央处理器
2.存储器:存储器又分为

  • 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而导致所有的进程被终止

进程的调度实质上是线程的调度,而线程的调度和进程的调度一样
线程是操作系统调度执行的基本单位

8.操作系统对于线程的管理,仍然是“描述+组织”

a)每个线程都有一个PCB对象来描述,若干个PCB对象要放到一个双向链表中组织

b)线程和PCB之间是一一对应的,而一个进程会和N个PCB对应

c)有些系统中的“线程”也成为“轻量级”进程

9.关于进程和线程的关系如下图
9.1单进程单线程
在这里插入图片描述
9.2单进程多线程
这就是实现了线程和线程之间是资源共享得到
发生冲突情况:就是两个老铁都要吃同一个鸡大腿
此时如果某个线程出现异常,并且又没有得到很好的处理的话,此时就会导致整个进程被终止
在这里插入图片描述
9.3多进程单线程
注意:这种方式开销比较大,因为需要两个房间,还需要两个桌子一只鸡,但是确实只有一个人在吃鸡
在这里插入图片描述

9.4多进程多线程
这就说明进程和进程之间是相互独立的
在这里插入图片描述
注意:单进程多线程的开销相对于多线程单线程来说开销更小,因为
(1)线程比进程更轻量级
(2)创建一个线程的成本比创建进程低
(3)销毁一个线程的成本也比销毁进程低
低的理由,分配资源的最小单位,每次创建进程都得分配一堆配套的资源,线程的资源可以和其他同进程中的线程共享,也就不需要重新分配了

9.5当线程多的时候会提高效率,但是线程越多越好吗?
答:当然不是,因为线程过多,会导致有的线程无法共享到同进程下的资源,线程的数量是会提高并发程度,也就能提高程序的执行效率,但不是线程越多越好
线程的多少和CPU的核数是相关的,也是和当前线程执行的任务类型相关(CPU密集型的任务还是IO密集型的任务)
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值