进程和线程的区别(4大核心区别联系)

进程

进程是系统中正在运行的一个程序,程序一旦运行就是进程,比如你的Chrome浏览器、播放器、游戏、IDE等等。

如下图所示:

进程和线程的区别(4大核心区别联系)-mikechen

进程可以看成程序执行的一个实例,比如:上面红框显示的Chrome浏览器,这就是一个进程,进程是系统资源分配的独立实体。

进程有如下特征:

  1. 每个进程都拥有独立的地址空间;
  2. 一个进程无法访问另一个进程的变量和数据结构;
  3. 如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等;
  4. 一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间;
  5. 同一进程内的多个线程会共享部分状态。

 

线程

在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。

后来随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大(任务调度采用的是时间片轮转的抢占式调度方式),已经无法满足越来越复杂的程序的要求了,于是就发明了线程。

进程和线程的区别(4大核心区别联系)-mikechen

一个进程可以有多个线程,如视频中同时听声音,看图像,看弹幕等等,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。

 

进程和线程的区别

前面讲了进程与线程,下面我们再最后总结梳理下具体的区别点,主要包含如下4点:

1.进程和线程的关系

一个进程由一个或多个线程组成,线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位。

 

2.地址空间和资源

进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)等;

 

3.调度切换效率

从调度和切换效率上讲,线程上下文切换比进程上下文切换要快得多。

 

4.通信

进程间通信IPC(管道,信号量,共享内存,消息队列),线程间可以直接独写进程数据段(如全局变量)来进程通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

 

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法