线程和进程
我们现在使用的电脑很多都是几核几线程的,一个电脑的运行性能和CPU有着很大的关系,而几核的电脑直接影响到CPU的好坏!
我们正常来说:几核的电脑可以运行多少应用,多少个进程。而这多少个进程又带动着多线程。宏观上看去我们所打开的应用都是同时进行的,但是从微观上看,是有先后顺序的,它们互相争夺这CPU的资源。
我们之前所使用的单核电脑,为何也可以同时开启多个应用,同时进行着不同的功能,这就说到了CPU的复制,单核的电脑系统中,会分化出多个模拟的CPU,从而带动了多个应用的同时进行!
解释
- 进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配合调度的一个独立单位
- 线程:是进程的一个实体,是CPU调度合分派的基本单位,是比进程更小的能独立运行的基本单位。线程基本不拥有系统的基本资源,只拥有一些运行。
线程和进程之间的关系:
- 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程可以并发执行!
- 相对于进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
区别:
- 主要区别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是一个进程中不同的执行路径。
- 线程有自己的堆栈和局部变量,但线程之间没有独立的地址空间,一个线程死掉就等于一个进程死掉,所以多进程比多线程程序健壮。但在进程切换时,耗费资源过大,效率较差。
- 线程的划分尺度小于进程,使得多线程程序的并发性高
- 线程不能独立运行;进程可以跨机器迁移
拓展
进程树
进程树:一个进程树由多个不同的进程组成,这些进程有着父级和子级的关系
举例:
我们打开cmd.exe,这是一个进程。 在cmd.exe命令行窗口中,输入notepad.exe,打开了记事本。 此时cmd.exe和notepad.exe两个不同的进程,组成了一个进程树。 且cmd.exe是父级进程;notepad.exe是子级进程。
- 特点:子级进程伴随着父级进程的结束而结束。而子级进程结束,不会影响到父级进程的运行。
时间片
时间片又称“量子”或“处理器片”,是分时操作系统分配给每个正在运行的进程微观上的一段CPU时间(在抢占内核中是:从进程开始运行直到被抢占的时间)。
解说:事实上,虽然一台计算机通常可能拥有多个CPU,但是同一个CPU永远不可能真正的同时运行多个任务。 在只考虑一个CPU的情况下,这些进程“看起来像”同时运行的,实则是轮流穿插地运行,由于时间片通常很短,用户感觉不到!
-时间片是由操作系统内核的调度程序分配给每个进程。首先,内核会给每个进程分配相等的初始时间片,然后每个进程轮番的执行相应的时间,当所有进程处于时间片耗尽的状态时,内核会重新为每个进程计算并分配时间片,如此往复,完成相应的性能和操作!
下文来自百度百科: 通常状况下,一个系统中所有的进程被分配到的时间片长短并不是相等的,尽管初始时间片基本相等(在Linux系统中,初始时间片也不相等,而是各自父进程的一半),系统通过测量进程处于“睡眠”和“正在运行”状态的时间长短来计算每个进程的交互性,交互性和每个进程预设的静态优先级(Nice值)的叠加即是动态优先级,动态优先级按比例缩放就是要分配给那个进程时间片的长短。一般地,为了获得较快的响应速度,交互性强的进程(即趋向于IO消耗型)被分配到的时间片要长于交互性弱的(趋向于处理器消耗型)进程。
以上是,对于进程和线程的理解!
|