进程与线程

进程

一台电脑,你一边在用谷歌浏览器上网,一边在听网易云音乐,一边在用Word写文档,同时有3个任务正在运行。

抛开多核CPU的概念,假设这台电脑是古老的单核CPU,它是怎么执行多任务的呢?

事实上每个任务都是由CPU交替轮流执行的。

任务1花了0.01秒,任务2花了0.03秒,任务3花了0.05秒。。。。只是作为任务的执行者,CPU的速度实在是太快了,所以我们感觉就像所有任务都在同时执行。

这里的一个任务就是一个进程(Process),进程有三种状态:就绪(Ready)、运行(Running)、阻塞(Blocked)

这个过程

比如执行一段程序代码,当被分配得到CPU前,此进程已获得除处理器外的所需资源,静静地等待被分配处理器资源,此状态即Ready;
当被分配得到CPU时,进程占用处理器资源,一般来说,处于此状态的进程的数目小于等于处理器的数目(CPU核数),此状态即Running;
这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所说的程序上下文。
当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临幸;
在被切换出去的最后一步工作就是保存好程序的上下文,因为这个是下次他被CPU临幸时的运行环境,必须保存。
 
前面讲过在CPU看来所有的任务都是一个一个的轮流执行的,具体的轮流方法就是:
先加载程序A的上下文,然后开始执行A,保存程序A的上下文;调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文。。。。
进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文

线程

线程(Thread)是什么呢?进程的颗粒度太大,每次都要有上下文的调入,保存,调出。如果我们把进程比喻为一个运行在电脑上的软件,那么一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现程序A,实际分成 a,b,c等多个块组合而成。那么这里具体的执行就可能变成:程序A得到CPU ,CPU加载上下文,开始执行程序A的a小段,然后执行A的b小段,然后再执行A的c小段,最后CPU保存A的上下文。这里a,b,c的执行是共享了A的上下文,CPU在执行的时候没有进行上下文切换的。这里的a,b,c就是线程,也就是说线程是共享了进程的上下文环境,分的更为细小的CPU时间段。

进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

进程与线程的区别

根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位

资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的

影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行

最大进程数与当前进程数

最大进程数:ulimit -u
修改这个值:
centos 6.*可以修改/etc/security/limits.d/90-nproc.conf
centos 7.*可以修改/etc/security/limits.d/20-nproc.conf
查询当前整个系统已用的进程数:
ps aux |wc -l  或 top

如果安装了zabbix客户端,还可以用zabbix_agentd -t proc.num[]来测试key

 

当前线程数与某个进程的线程数

查询当前整个系统已用的线程数:

pstree -p | wc -l  或  top -H

 

 查看某个进程的线程数:

1、top -H -p pid   

也可以top -p pid再按H,线程会一个个加载出来

2、pstree -p pid |wc -l 

如果用程序名:pstree -p `ps -ef | grep ssop |grep -v grep| awk '{print $2}'`|wc -l

3、cat /proc/pid/status 

4、ll /proc/pid/task/|wc -l 

 

 

 

 

参考:

线程和进程的区别是什么? - zhonyong的回答 - 知乎 https://www.zhihu.com/question/25532384/answer/81152571

https://blog.csdn.net/wisgood/article/details/80630014

 

 

 

posted @ 2020-05-28 17:10  酒红色  阅读(188)  评论(0编辑  收藏  举报