一.操作系统的认识
1:常见的操作系统有
操作系统是⼀组做计算机资源管理的软件的统称。⽬前常⻅的操作系统有:Windows系列、Unix系
列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
- Windows是常见的个人电脑操作系统;
- Linux是常见的服务器上运行的操作系统;
- Android是常见的手机上运行的操作系统;
操作系统的定位
简单来说,操作系统是管理各种硬件设备所提供的api接口进行封装,将其包装成一个软件,方便程序员在代码实现中直接进行调用而省去了一步步去连接硬件接口的复杂工作,例如:JAVA中的JDK便是对硬件接口封装的一种形式.
2:操作系统以进程操作系统由三个基本功能
1)防⽌硬件被时空的应⽤程序滥⽤;
2)向应⽤程序提供简单⼀致的机制来控制复杂⽽⼜通常⼤相径庭的低级硬件设备
3)以及一些系统的调度任务(以下两点):
- 进程调度:操作系统以进程的方式维护运行中的程序,并通过PCB中的一些属性(比如:优先级,记账信息,状态等)完成对进程的调度;
- 资源分配:应用程序在运行时向操作系统申请各种资源,其中就包括内存,所有内存管理也是操作系统的重要工作之一;组织文件管理系统:了解一下操作系统的定位,操作系统是计算机的最高管理者,管理所有的计算机资源,包括文件系统,协调硬件工作;
二:进程(Process)
1:什么是进程/任务(Process/Task)
每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运
⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可
以说是计算机科学中最重要和最成功的概念之⼀。
2:进程的定义
是操作系统进行资源分配的最小单位。一个进程是一个程序的一次执行过程。每启动一个进程,操作系统就会为它分配一块独立的内存空间,用于存储PCB、数据段、程序段等资源。每个进程占有一块独立的内存空间
3:进程主要包含了六大板块
1).PID进程标识符(每一个进程都有自己的编号,系统通过编号来调度进程和销毁进程);
2):内存指针(主要是标识了哪些内存是该进程可以使用的空间);
3):文件描述符(进程使用的硬件的相关信息,将硬件设备封装成文件进行调用,并且在文件描述符表中分配一个表项,也就是一个PCB,来描述这个文件对系统资源的使用情况);
PCB:底层代码类似于C语言中的结构体,其中包含了很多关于一个进程的信息 ,也叫进程控制块,如:内存的使用情况,CPU的占比.......
4):状态
- 就绪状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态
- 阻碍状态: 正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
5):优先级:多个进程等待系统的随机调度,根据哪个进程的优先级高则优先调用那个进程
6):记账信息:根据每个进程调用CPU的多少时间,进行一个统计,会根据这个统计来进一步调整调度的策略.
三:线程(Thread)
1:认识线程(Thread)
线程是什么:⼀个线程就是⼀个"执⾏流".每个线程之间都可以按照顺序执⾏⾃⼰的代码.多个线程之间"同时"执⾏着多份代码
2:为啥要有线程
⾸先,"并发编程"成为"刚需".
• 单核CPU的发展遇到了瓶颈.要想提⾼算⼒,就需要多核CPU.⽽并发编程能更充分利⽤多核CPU
资源.
• 有些任务场景需要"等待IO",为了让等待IO的时间能够去做⼀些其他的⼯作,也需要⽤到并发编程.
比特就业课
其次,虽然多进程也能实现并发编程,但是线程⽐进程更轻量.
• 创建线程⽐创建进程更快.
• 销毁线程⽐销毁进程更快.
• 调度线程⽐调度进程更快.
最后,线程虽然⽐进程轻量,但是⼈们还不满⾜,于是⼜有了"线程池"(ThreadPool)和"协程"
(Coroutine)
3:创建线程
感受多线程程序和普通程序的区别:
• 每个线程都是⼀个独⽴的执⾏流
• 多个线程之间是并发执⾏的,代码如下:
import java.util.Random; public class Solution { private static class MyThread extends Thread { @Override public void run() { Random random = new Random(); while (true) { // 打印线程名称 System.out.println(Thread.currentThread().getName()); try { // 随机停⽌运⾏ 0-9 秒 Thread.sleep(random.nextInt(10)); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String[] args) { MyThread t1 = new MyThread(); t1.start(); Random random = new Random(); while (true) { // 打印线程名称 System.out.println(Thread.currentThread().getName()); try { Thread.sleep(random.nextInt(10)); } catch (InterruptedException e) { // 随机停⽌运⾏ 0-9 秒 e.printStackTrace(); } } } }
代码运行结果如下:
使⽤ jconsole 命令观察线程:
四:进程与线程的区别
1):进程是包含线程的.每个进程⾄少有⼀个线程存在,即主线程
2):进程和进程之间不共享内存空间.同⼀个进程的线程之间共享同⼀个内存空间
3):进程是系统分配资源的最⼩单位,线程是系统调度的最⼩单位
4):⼀个进程挂了⼀般不会影响到其他进程.但是⼀个线程挂了,可能把同进程内的其他线程⼀起带⾛(整个进程崩溃).
如果觉得文章不错,期待你的一键三连哦,你个鼓励是我创作的动力之源,让我们一起加油,顶峰相见!!!💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓 💓