进程、线程与协程区别(面试)

1——协程

协程这个概念比较少见,自己不太熟悉,所以多说点。

协程,又称微线程,纤程。英文名Coroutine。

子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。

所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。

子程序调用总是一个入口,一次返回,调用顺序是明确的。

注意——而协程的调用和子程序不同。

协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。

协程,在执行过程中可中断去执行其他任务执行完毕后再回来继续原先的操作——可以理解为两个或多个程序协同工作。

协程特点在于单线程执行。

优势一:具有极高的执行效率,因为在任务切换的时候是程序之间的切换(由程序自身控制)而不是线程间的切换,所以没有线程切换导致的额外开销(时间浪费),线程越多,携程性能优势越明显。

优势二:由于是单线程工作,没有多线程需要考虑的同时写变量冲突,所以不需要多线程的锁机制,故执行效率比多线程更高。

常利用多进程(利用多核)+协程来获取更高的性能。

2——进程与线程区别

1.进程是资源分配最小单位,线程是程序执行的最小单位;

2.进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;
线程没有独立的地址空间,它使用相同的地址空间共享数据;

3.CPU切换一个线程比切换进程花费小;
创建一个线程比进程开销小;
线程占用的资源要⽐进程少很多。

4.线程之间通信更方便,同一个进程下,线程共享全局变量,静态变量等数据,
进程之间的通信需要以通信的方式(IPC)进行;(但多线程程序处理好同步与互斥是个难点)

5、**多进程程序更安全,**生命力更强,一个进程死掉不会对另一个进程造成影响(源于有独立的地址空间);
多线程程序更不易维护,一个线程死掉,整个进程就死掉了(因为共享地址空间);

6、进程对资源保护要求高,开销大,效率相对较低;
线程资源保护要求不高,但开销小,效率高,可频繁切换;

还有人这样总结,感觉挺好——

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

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

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

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

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

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

原文链接:https://blog.csdn.net/ThinkWon/article/details/102021274

发布了254 篇原创文章 · 获赞 23 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_30242987/article/details/104732156
今日推荐