«
进程 线程 协程 各自的概念以及三者的对比分析

时间:2022-6   


go语言中的goroutine就是协程

1 进程

概念

进程,直观点说,保存在硬盘上的程序运行之后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。

特点

操作系统会以进程为单位,分配系统资源(CPU时间片,内存等资源),进程是资源分配的最小单位。

示意图

2 线程

概念

线程,有时被称为轻量级进程(LightWeight Process,LWP),是操作系统调度(CPU调度)执行的最小单位。

示意图

3 进程和线程的区别和联系

3.1 区别

调度:进程作为拥有资源的基本单位,线程作为调度和分配的基本单位。即:进程是资源的拥有者,线程是资源的调度者。

并发性:不仅进程之间可以并发执行,同一个进程的多个线程也可以并发执行

拥有资源:

系统开销:

3.2 联系

一个线程只能属于一个进程,一个进程可以有多个线程,至少有一个线程

资源分配给进程,同一进程的所有线程共享该进程的所有资源

处理机(中央处理器+主存储器+输入输出设备)分配资源给进程,即 真正运行在处理机上的是进程

线程在执行过程中,需要协作同步。 不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体。

4 举例说明进程和线程的区别

这幅图是一个双向多通道的道路图,假如我们把整个道路看做一个“进程”的话,那种图中由白色虚线分割开的车道就是进程中的各个“线程”了。

  1. 这些车道(线程)共享了道路(进程)的土地资源(系统资源)

  2. 这些车道(线程)必须依赖于道路(进程),否则车道将没有意义(线程不能脱离于进程而存在)

  3. 这些车道(线程)之间可以并发运行(各个车道你走你的,我走我的),也可以同步运行(遇到红灯的情况,需要等待特点条件后再执行)

  4. 这些车道(线程)的运行和交通灯(代码逻辑)息息相关,如果交通灯出现问题(代码逻辑问题,比如死锁,多个线程同时竞争同一资源),会造成交通混乱

  5. 这些车道(线程)谁先运行起来是未知的,只有当信号灯变化(分配CPU时间的时候)那刻才知道

这个栗子实在是香,太经典了!

5 进程/线程之间的亲缘性

概念

亲缘性的意思是进程/线程只在某个CPU上运行(多核系统)

好处

使用CPU亲缘性的好处:防止进程/线程在CPU的多核间频繁切换,从而避免因切换带来的CPU的L1/L2 cache失效,cache失效会降低程序的性能。

6 协程

示意图

概念

线程(执行一个函数)和协程的区别和联系

def A(){
    print 1
    print 2
    print 3
}

def B(){
    print 'x'
    print 'y'
    print 'z'
}
复制代码

协程和多线程的优势?为什么有了多线程还要引入协程?

7 更多

进程间通信

8 相关链接

web开发必懂的概念和底层原理,通过对比的方式让大家更好的理解和使用。

多维度思考:如何提高项目的开发时间、提高安全性、提高运行速度,从多个维度带来的一些思考。

参考https加解密思路 实现自己网络请求数据传输的安全性,一致性,防篡改。(对称加密+非对称加密)

进程线程协程参考链接