进程和线程是什么?什么是进程什么是线程
本文目录
进程和线程是什么
首先来一句概括的总论:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。
下面细说背景:CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。
一个最最基础的事实:CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来就是轮流着来。
一个必须知道的事实:执行一段程序代码,实现一个功能的过程介绍 ,当得到CPU的时候,相关的资源必须也已经就位,就是显卡啊,GPS啊什么的必须就位,然后CPU开始执行。这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临幸。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次他被CPU临幸的运行环境,必须保存。
串联起来的事实:前面讲过在CPU看来所有的任务都是一个一个的轮流执行的,具体的轮流方法就是:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文。。。。进程和线程就是这样的背景出来的,两个名词不过是对应的CPU时间段的描述,名词就是这样的功能。
进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+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时间段。到此全文结束,再一个总结:进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。
什么是进程什么是线程
进程是系统中正在运行的一个程序,程序一旦运行就是进程。线程是进程的一个实体,是进程的一条执行路径。 进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。
程序,进程和线程的区别
程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程,也就是说进程是系统进行资源分配和调度的一个独立单位,每个进程都有自己单独的地址空间。所以说程序与进程的区别在于,程序是指令的集合,是进程运行的静态描述文本,而进程则是程序在系统上顺序执行时的动态活动。但是进程存在着很多缺陷,主要集中在两点: (1).进程只能在同一时间干一件事情,如果想同时干两件事或多件事情,进程就无能为力了。 (2).进程在执行的过程中如果由于某种原因阻塞了,例如等待输入,整个进程就会挂起,其他与输入无关的工作也必须等待输入结束后才能顺序执行。为了解决上述两点缺陷,引入了线程这个概念。线程是进程的一个实体,也是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,有时又被称为轻权进程或轻量级进程,相对进程而言,线程是一个更加接近于执行体的概念,进程在执行过程中拥有独立的内存单元,而线程自己基本上不拥有系统资源,也没有自己的地址空间,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。除了CPU 之外,计算机内的软硬件资源的分配与线程无关,但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。进程和线程的主要差别在于操作系统并没有将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些,对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
多线程的执行效率一定高于单线程吗
恰恰相反,多线程的执行效率一定低于单线程
多线程的目的并不在于提供CPU的执行效率,而且在于多个事务的准并行处理。
准并行的涵义在于并不是同时的,单核的CPU一个时刻只能执行一条机器指令。
多线程是将CPU的PC指针运行分解为非常小的时间片,将这些时间片分配在不同的进程,不同的线程之间运行。
这样CPU就不至于长时间堵塞在某一些事务中,导致其它事务没有办法处理。
比如某个软件在进行大数据的收发或者运算时,需要刷新显示界面以及人机交互。
假设数据的收发或者运算需要数秒时间,如果用单线程,在做数据处理的几秒时间内,没办法显示人机交互,则用户在界面上做操作,程序就没有任何响应。
如果用多线程,在数据处理线程处理了一段时间之后,CPU的指针暂停执行数据线程程序,转去执行界面处理程序,则用户做操作时,程序不至于没有响应。
采用多线程之后,由于线程本身创建和切换的开销,采用多线程不会提高程序的执行速度,反而会降低速度
本文相关文章:

ccriticalsection(MFC多线程写文件出现数据混乱)
2025年3月6日 05:30

java 多线程面试(面试问 关于JAVA多线程,从哪些方面回答呢)
2025年2月19日 18:00
更多文章:

row是什么意思翻译(英语Row.Knees,ribs,knees怎么翻译)
2025年2月20日 07:50

绿色资源网破解版下载(红包猎手为什么总要收费怎样才能做到永久VIP)
2025年3月3日 16:40

androidlistview(android 中listview是怎么用的)
2025年4月3日 10:30

attribute的意思(attribute是什么意思及反义词)
2025年2月10日 11:50

flex教程(flex2中文云端怎么用/flex2中文云端源/flex2中文云端源使用图文教程)
2025年3月18日 17:00

table array(在Excel中vlookup函数中table_array问题)
2025年2月25日 08:20

translational oncology(Stanford 医学院招AI相关postdoc是哪个老师)
2025年3月9日 08:50

oracle官网地址(oracle数据库的jdbc驱动在哪下载最好是具体的网址)
2025年3月15日 08:20

内存溢出异常(电脑软件使用某一程序,有时会报 内存溢出错误out of memory)
2025年2月16日 21:50

while语句循环的结构(while循环结构的语法和执行顺序是什么)
2025年3月26日 14:20

related videos(related videos是什么意思)
2025年2月11日 19:50