何为进程,与线程、协程的区别
在电脑上每打开一个应用,就是一个进程,比如word、腾讯视频、浏览器。但是在看视频时,需要同时播放视频和音频,这就是同一个进程的两个线程
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。
- 线程是什么呢?
进程的颗粒度太大,每次都要有上下的调入,保存,调出。如果我们把进程比喻为一个运行在电脑上的软件,那么一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现程序A,实际分成 a,b,c等多个块组合而成。那么这里具体的执行就可能变成:程序A得到CPU =》CPU加载上下文,开始执行程序A的a小段,然后执行A的b小段,然后再执行A的c小段,最后CPU保存A的上下文。这里a,b,c的执行是共享了A的上下文,CPU在执行的时候没有进行上下文切换的。这里的a,b,c就是线程,也就是说线程是共享了进程的上下文环境,的更为细小的CPU时间段。 - 协程
协程的特点在于是一个线程执行,那和多线程比,协程有何优势?
极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显;
不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
进程的优缺点
- 优点:
可以并行的执行多个任务,提高运行效率,(可利用计算机多核),空间独立,数据安全,创建方便 - 缺点
假设你打算切换到多任务模型,可以先做1分钟语文,再切换到数学作业,做1分钟,再切换到英语,以此类推,只要切换速度足够快,这种方式就和单核CPU执行多任务是一样的了,以幼儿园小朋友的眼光来看,你就正在同时写5科作业。
但是,切换作业是有代价的,比如从语文切到数学,要先收拾桌子上的语文书本、钢笔(这叫保存现场),然后,打开数学课本、找出圆规直尺(这叫准备新环境),才能开始做数学作业。操作系统在切换进程或者线程时也是一样的,它需要先保存当前执行的现场环境(CPU寄存器状态、内存页等),然后,把新任务的执行环境准备好(恢复上次的寄存器状态,切换内存页等),才能开始执行。这个切换过程虽然很快,但是也需要耗费时间。
给程序开启多进程
- 安装uwsgi,
pip install uwsgi --user
- 修改配置文件
my_process.uwsgi
- 后台启动
nohup uwsgi --ini my_process.uwsgi &
(加&:后台守护进程)
查看进程相关信息
- 查看进程端口是否被占用,如果占用,其PID:
lsof -i:端口
- 查看后台正运行的进程:
top
- 查找特点进程的相关信息:
top -p pid
ps
(ProcessStatus的缩写),列出系统当前运行的进程;-aux
参数让ps
命令显示更详细的参数信息,表示为ps -aux
,这样,当我们查找某个程序运行的进程时,可以采用ps -aux | grep "classifier_server.py"
- ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
- 删除某个进程:
kill -9 pid
程序压测
ngrinder
参考链接
https://www.kancloud.cn/kancloud/understanding-linux-processes/52207
https://blog.csdn.net/daaikuaichuan/article/details/82951084