进程?线程?协程?

进程和线程的关系?

线程是进程中的一个实体,线程本身是不会独立存在的。进程是操作系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。操作系统在分配资源时是把资源分配给进程的,但是CPU比较特殊,它是分配给线程的,因为真正要占用CPU运行的是线程,所以也说线程是CPU分配的基本单位

在Java中,当我们启动main函数时其实就启动了一个JVM的进程,而main函数所在的线程就是这个进程中的一个线程,也称主线程

进程和线程的关系图如下

 由图可知,一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域

堆、方法区、程序计数器和栈的内容属于JVM 的内存布局(内存结构)的知识,可以查看我的另一篇博文——JVM--内存结构,谢谢

协程?

协程就像非常轻量级的线程。线程切换或线程阻塞的开销都比较大。协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程

协程占用的内存小,大概1-2KB左右,线程占用内存大概1MB。

 参考

《Java并发编程之美》翟陆续

希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
原文地址:https://www.cnblogs.com/liaowenhui/p/15442902.html