进程和线程
多进程和多线程
一台电脑可以同时运行很多个程序,比如qq微信网易云音乐,一个程序里可以有很多个进程,必须有一个主进程,一般是第一个,结束主进程,程序就结束了。一个进程里又有很多线程,第一个开启的线程是主线程,主线程结束了这个进程就结束了。另有一种说法是线程里还有纤程(协程),这个知道就可以了。
进程和进程之间是严格隔离的,进程拥有独立的执行空间、存储。
同一个进程之内的线程是共享同一套空间共享同一套代码的。
多进程(慢、简单、安全)
PHP、node是多进程的
缺点:
1.成本高(慢)。每开一个进程,需要重新创建一整套的空间,找计算机申请空间申请内存需要时间,并需要做一堆初始化。产生和销毁成本都比较高。
2.进程间通信麻烦。
优点:
1.安全(进程间隔离)。如果某一个进程死了对其他进程没影响,因为各自是隔离的。
2.代码简单。
多线程(快、复杂、不安全)
JAVA、C是多线程的
缺点:
1.不安全(共享一套空间、代码。如果某一个线程死了那进程内的线程就都死了(如果运行在虚拟机上,虚拟机可以选择只关闭某一个线程,不会一起死)。
2.代码复杂。
优点:
1.成本低(快)。
2.线程间通信容易一些。
进程
主进程又叫守护进程
子进程又叫工作进程
- 普通程序不能”创建“进程,只有系统进程才能创建进程,只有主进程可以分裂
- 进程是分裂出来
- 分裂出来的两个进程,执行的是同一套代码,同一个文件
- 父子进程之间可以共享句柄
1 | const cluster=require('cluster'); |
进程调度
多个进程:
第一个满了->启用第二个->前两个都满了->启用第三个 …