引言:进程和线程似乎已经成为现在面试的一大热点,几乎成为许多大厂面试必备,下面记录自己查询相关资料感觉比较好的解释:
大家都知道:进程其实就是一个在电脑上运行的程序,例如QQ;而线程就是我们这个运行程序的一个“分支任务”例如:你和C正在聊天的同时,B又向你发起了QQ语音;这两个事件就是同属于QQ这个进程的两个线程;(个人理解)
如果一个操作系统拥有线程概念时,那么进程是就是该操作系统资源分配的最小单位;而线程就是操作系统调度和运行的基本单位;
各个进程之间拥有不同的数据空间和代码;就算存在父子关系也是;
而同属一个进程的不同线程他们共享同一个进程的数据空间和代码(起始就是进程的上下文(PCB));各自仅仅又有少量运行必要的数据结构(寄存器,栈,程序计数器等,);
引自:知乎:
进程和线程两个名词不过是对应的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工作时间段的描述,不过是颗粒大小不同。
**作者:zhonyong链接:https://www.zhihu.com/question/25532384/answer/81152571来源:知乎著作权归作者所有,转载请联系作者获得授权。