博客主页:小夏的编程之路的博客
⏩ 收录专栏:操作系统的认识
欢迎大家点赞评论收藏⭐文章
目录
一.操作系统的认识
1:常见的操作系统有
2:操作系统以进程操作系统由三个基本功能
二:进程(Process)
1:什么是进程/任务(Process/Task)
2:进程的定义
3:进程主要包含了六大板块
三:线程(Thread)
1:认识线程(Thread)
四:进程与线程的区别
操作系统是⼀组做计算机资源管理的软件的统称。⽬前常⻅的操作系统有:Windows系列、Unix系
列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
简单来说,操作系统是管理各种硬件设备所提供的api接口进行封装,将其包装成一个软件,方便程序员在代码实现中直接进行调用而省去了一步步去连接硬件接口的复杂工作,例如:JAVA中的JDK便是对硬件接口封装的一种形式.
1)防⽌硬件被时空的应⽤程序滥⽤;
2)向应⽤程序提供简单⼀致的机制来控制复杂⽽⼜通常⼤相径庭的低级硬件设备
3)以及一些系统的调度任务(以下两点):
每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运
⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可
以说是计算机科学中最重要和最成功的概念之⼀。
是操作系统进行资源分配的最小单位。一个进程是一个程序的一次执行过程。每启动一个进程,操作系统就会为它分配一块独立的内存空间,用于存储PCB、数据段、程序段等资源。每个进程占有一块独立的内存空间
1).PID进程标识符(每一个进程都有自己的编号,系统通过编号来调度进程和销毁进程);
2):内存指针(主要是标识了哪些内存是该进程可以使用的空间);
3):文件描述符(进程使用的硬件的相关信息,将硬件设备封装成文件进行调用,并且在文件描述符表中分配一个表项,也就是一个PCB,来描述这个文件对系统资源的使用情况);
PCB:底层代码类似于C语言中的结构体,其中包含了很多关于一个进程的信息 ,也叫进程控制块,如:内存的使用情况,CPU的占比.......
4):状态
5):优先级:多个进程等待系统的随机调度,根据哪个进程的优先级高则优先调用那个进程
6):记账信息:根据每个进程调用CPU的多少时间,进行一个统计,会根据这个统计来进一步调整调度的策略.
线程是什么:⼀个线程就是⼀个"执⾏流".每个线程之间都可以按照顺序执⾏⾃⼰的代码.多个线程之间"同时"执⾏着多份代码
2:为啥要有线程
⾸先,"并发编程"成为"刚需".
• 单核CPU的发展遇到了瓶颈.要想提⾼算⼒,就需要多核CPU.⽽并发编程能更充分利⽤多核CPU
资源.
• 有些任务场景需要"等待IO",为了让等待IO的时间能够去做⼀些其他的⼯作,也需要⽤到并发编程.
比特就业课
其次,虽然多进程也能实现并发编程,但是线程⽐进程更轻量.
• 创建线程⽐创建进程更快.
• 销毁线程⽐销毁进程更快.
• 调度线程⽐调度进程更快.
最后,线程虽然⽐进程轻量,但是⼈们还不满⾜,于是⼜有了"线程池"(ThreadPool)和"协程"
(Coroutine)
感受多线程程序和普通程序的区别:
• 每个线程都是⼀个独⽴的执⾏流
• 多个线程之间是并发执⾏的,代码如下:
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):⼀个进程挂了⼀般不会影响到其他进程.但是⼀个线程挂了,可能把同进程内的其他线程⼀起带⾛(整个进程崩溃).
如果觉得文章不错,期待你的一键三连哦,你个鼓励是我创作的动力之源,让我们一起加油,顶峰相见!!!