进程,线程,协程的区别,并发与并行的区别

1、运行一个程序就会产生一个进程,一个进程至少包含一个线程;

2、每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;

3、进程下的多个线程没有独立的地址空间,它们使用相同的地址空间共享数据,同一个进程下,线程共享全局变量,静态变量等数据;

4、多进程程序更安全,生命力更强,一个进程死掉不会对另一个进程造成影响(源于有独立的地址空间);

5、线程程序更不易维护,一个线程死掉,整个进程就死掉了(因为共享地址空间);

6、CPU切换一个线程比切换进程花费小;

7、创建一个线程比进程开销小;

8、线程占用的资源要⽐进程少很多;

9、协程不是被操作系统内核所管理,而完全是由程序所控制,

      极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销

 

并发与并行

  • 并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。
  • 并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。

并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序

(多个<3个>程序在在同一个cpu上运行)

并行,多个<3个>程序在在多个cpu上运行

打个比方。并发,就像一个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。

并行,就是2个人喂2个孩子,两个孩子也同时在吃饭

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页