Java进程和线程,Java基础视频【图文】_程序员小虎

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

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

[](

)进程的初步认识

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

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

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

Java进程和线程,Java基础视频【图文】_程序员小虎

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

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

Java进程和线程,Java基础视频【图文】_程序员小虎

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

[](

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


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

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

例如:

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

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

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

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

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

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

Java进程和线程,Java基础视频【图文】_程序员小虎

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

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

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

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

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

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

例如

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

b)进程的状态

c)进程的优先级

d)进程的上下文信息

e)进程的记账信息

Java进程和线程,Java基础视频【图文】_程序员小虎

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

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.关于进程和线程的关系如下图

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

Java进程和线程,Java基础视频【图文】_程序员小虎

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

本站由小牛团队全力维护,小牛十年了,大家已经步入中年 。本站源码全部经过团队成员测试并调试,价格可能比其它网站略贵几元钱,不解释!
小牛资源 » Java进程和线程,Java基础视频【图文】_程序员小虎

发表评论

全站资源亲测可用,价格略高几元,不解释

立即查看 了解详情