进程
进程是系统中正在运行的一个程序,程序一旦运行就是进程,比如你的Chrome浏览器、播放器、游戏、IDE等等。
如下图所示:
进程可以看成程序执行的一个实例,比如:上面红框显示的Chrome浏览器,这就是一个进程,进程是系统资源分配的独立实体。
进程有如下特征:
- 每个进程都拥有独立的地址空间;
- 一个进程无法访问另一个进程的变量和数据结构;
- 如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等;
- 一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间;
- 同一进程内的多个线程会共享部分状态。
线程
在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。
后来随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大(任务调度采用的是时间片轮转的抢占式调度方式),已经无法满足越来越复杂的程序的要求了,于是就发明了线程。
一个进程可以有多个线程,如视频中同时听声音,看图像,看弹幕等等,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。
进程和线程的区别
前面讲了进程与线程,下面我们再最后总结梳理下具体的区别点,主要包含如下4点:
1.进程和线程的关系
一个进程由一个或多个线程组成,线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位。
2.地址空间和资源
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)等;
3.调度切换效率
从调度和切换效率上讲,线程上下文切换比进程上下文切换要快得多。
4.通信
进程间通信IPC(管道,信号量,共享内存,消息队列),线程间可以直接独写进程数据段(如全局变量)来进程通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》