1、运行一个程序就会产生一个进程,一个进程至少包含一个线程;
2、每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;
3、进程下的多个线程没有独立的地址空间,它们使用相同的地址空间共享数据,同一个进程下,线程共享全局变量,静态变量等数据;
4、多进程程序更安全,生命力更强,一个进程死掉不会对另一个进程造成影响(源于有独立的地址空间);
5、线程程序更不易维护,一个线程死掉,整个进程就死掉了(因为共享地址空间);
6、CPU切换一个线程比切换进程花费小;
7、创建一个线程比进程开销小;
8、线程占用的资源要⽐进程少很多;
9、协程不是被操作系统内核所管理,而完全是由程序所控制,
极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销
并发与并行
- 并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。
- 并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。
并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序
(多个<3个>程序在在同一个cpu上运行)
并行,多个<3个>程序在在多个cpu上运行
打个比方。并发,就像一个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。
并行,就是2个人喂2个孩子,两个孩子也同时在吃饭