欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

进程与线程的区别

程序员文章站 2024-02-11 21:20:58
...

一、什么是进程和线程

  • 进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。简单来说呢,就是一段程序的执行过程
  • 线程:一条线程指的是进程中一个单一顺序的控制流。

二、进程和线程的由来

  • 串行:初期的计算机智能串行执行任务,并且需要长时间等待用户输入
  • 批处理:预先将用户的指令集中成清单,批量串行处理用户指令,仍无法并发执行
  • 进程:进程独占内存空间,保存各自运行状态,相互间不干扰且可以相互切换,为并发处理任务提供了可能
  • 线程:共享进程的内存资源,相互间切换更快速,支持更细粒度的任务机制,使进程内的子任务得以并发执行

发展至今,一个进程包括多个线程,每个线程负责一个独立的子任务。进程是资源分配的最小单位,线程是CPU调度的最小单位。一个程序至少一个进程,一个进程至少一个线程

三、进程和线程的区别

在说区别之前我们先来了解相关知识

PCB(进程控制块)

  • 所有与进程相关的资源都被记录在PCB中
    进程与线程的区别
  • 进程是抢占处理机的调度单位;线程属于某个进程,共享其资源。同一进程内的不同线程共享同一地址空间
    进程包含这些:
    进程与线程的区别

通过上面我们可以总结如下区别:

  • 线程不能看做独立应用,而进程可看做独立应用
  • 进程有独立的地址空间,相互不影响,线程只是进程不同执行的路径,也就是说某个线程挂了,所在的进程也就挂了
  • 线程没有独立的地址空间,多进程的程序比多线程程序健壮
  • 进程的切换比线程的切换开销大
  • 线程必须依附应用程序,由应用程序决定多个线程的执行顺序

四、Java中进程和线程的关系

  • Java对操作系统提供的功能进行封装,包括进程和线程
  • 运行一个程序会产生一个进程,进程包含至少一个线程
  • 每个进程对应一个JVM实例(JVM会创建一些功能线程,如GC线程),多个线程共享进程在JVM里的堆资源
  • Java采用单线程编程模型,程序会自动创建主线程,尽量将耗时的操作放在子线程,避免阻塞主线程
  • 主线程可以创建子线程,主线程是最后执行完成的,它要进行各种关闭操作

举一个很简单的例子:

package com.mtli.thread;

/**
 * @Description:
 * @Author: Mt.Li
 * @Create: 2020-05-03 16:20
 */
public class CurrentThreadDemo {
    public static void main(String[] args) {
        System.out.println("Current Thread: " + Thread.currentThread().getName());
    }
}

// 运行结果
Current Thread: main

这个程序执行后就相当于开启了一个线程,JVM也会创建对应的实例,它也会开启一个主线程

相关标签: Java底层