11
2020
04

说说进程、线程、协程之间的区别?

进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元;


同一个进程中可以包括多个线程;


进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束;


线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程;


进程的创建调用fork或者vfork,而线程的创建调用pthread_create;


线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源;


 


进程是资源分配的单位 


线程是操作系统调度的单位 


进程切换需要的资源很最大,效率很低 

线程切换需要的资源一般,效率一般 

协程切换任务资源很小,效率高 

多进程、多线程根据cpu核数不一样可能是并行的 也可能是并发的。协程的本质就是使用当前进程在不同的函数代码中切换执行,可以理解为并行。 协程是一个用户层面的概念,不同协程的模型实现可能是单线程,也可能是多线程。


 


进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。(全局变量保存在堆中,局部变量及函数保存在栈中)


线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是这样的)。


协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。


一个应用程序一般对应一个进程,一个进程一般有一个主线程,还有若干个辅助线程,线程之间是平行运行的,在线程里面可以开启协程,让程序在特定的时间内运行。


协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。