进程和线程基础理解

进程

  • 相关概念理解
    1> 对进程的理解:正在运行的程序,是系统惊醒调度和分配的独立单位,每一个进程都有自己的内存空间和系统资源。如:java 程序运行在 JVM 中,JVM这个进程就是他们的容器,打开任务管理器就可以看到所有进程的信息。
    2> 上下文:操作系统保持跟踪进程运行所需的素有状态信息,这种状态,也就是上下文。
    (上下文包括许多信息:PC和寄存器文件的当前值、主存内容。)
    3> 上下文的切换:当有多个进程在执行的时候,CPU会在进程间快速切换,即保存当前进程的上下文,恢复新进程的上下文,此时新的进程就会从上次停止的地方执行。
    4> 并发:逻辑上同时发生,某一个时间段内同时运行多个程序,任务交替执行时,,多个进程在一个 CPU下采用时间片轮转的方式,一段时间内多个进程都得以推进。给人并行的错觉(伪并行)。
    5> 并行:物理上同时发生,某一个时间点同时运行多个程序,多个进程在多个CPU下分别,同时进行运行,这才是真正意义上的同一时刻可以有多个任务同时执行这称之为并行
  • 进程的创建
    系统初始化
    启动操作系统会创建若干个进程,有些是前台进程,同用户交互并替他们完成工作的进程;有些被运行在后台的是守护进程,他们大部分时间在休眠,当收到请求会被唤醒。
    正在运行的程序执行了创建进程的系统调度
    通常一个正在运行的进程会发出系统调用来创建一个或多个新进程来帮助他完成工作。如:当有大量数据需要经过网络调取并处理,那么当前进程可能会读数据,并把它放到共享缓冲区中,再创建一个新的进程取走并正确处理。
    用户请求创建一个新进程
    如常见我们双击图标或者输入命令就可以启动程序,创建了进程。
    初始化一个批处理工作
    在大型机的批处理系统中应用。用户在这种系统中提交批处理作业。当操作系统决定它有资源来运行另一个任务时,它将创建一个新进程并从其中的输入队列中运行下一个作业。
  • 进程的状态
    在这里插入图片描述

线程

  • 相关概念理解
    1> 对线程的理解:进程的单个顺序控制流,是一条执行路径,每个线程都运行再进程的上下文中,并共享同样的代码和全局数据。
    2> 多线程的意义:程序的执行其实是抢CPU的资源,CPU的执行权,多个进程是在抢这个资源,而其中的某一个进程如果执行的路径比较多,就会又更高的几率抢占到CPU使用权;并且不敢保证哪一个线程能够在哪个时刻抢到,所以线程的执行有随机性。
    3> java程序运行原理:java命令启动JVM,这个进程去创建主线程调用 main 方法。(当然jvm启动的应该是多线程,如垃圾回收线程也需要启动,否则很容易栈溢出,当然还可能有别的,但至少有这两个)
    4> 线程调度
    分时调度模型:所有的线程轮流使用CPU的使用权,平均分配每个程序占用CPU的时间片
    抢占式调用模型:优先让优先级高的线程使用CPU,如果线程优先级相同,那么会随机选择一个,
    优先级高的获取CPU的时间片相对多一些
    (java使用的是抢占式调度模型)
    5> 线程优先级:默认是 5 ,优先级有极限(0-10之间 MAX_PRIORITY MIN_PRIORITY NORM_PRIORITY)(注意线程优先级仅仅表示线程获取CPU时间片的几率高,需要在比较多次的运行才可能看到效果(因为存在随机性)
    6> 线程池:两个原则:用少量的线程、让线程保持忙碌来提高效率
    创建一定数量的线程,让这些线程区处理所有的任务,任务执行完毕之后线程并不结束而是回到线程池等待接受下一个任务。(并且这些线程都是预先创建的,任务来了直接执行,当线程池的线程刚刚创建都是处于阻塞状态,任务来了就唤醒。)
  • 线程的生命周期
    在这里插入图片描述
发布了52 篇原创文章 · 获赞 6 · 访问量 1444

猜你喜欢

转载自blog.csdn.net/qq_40488936/article/details/104889039