进程和线程
在我的理解中.进程是一个很大的东西,它占据着自己独有的一片内存空间和各种资源,而线程却很惨.为什么这么说呢, 众所周知,进程掌握了大量的资源,就跟老板一样, 很有钱, 然后线程呢,他就像是个打工仔, 拿着老板的工资(进程分配给线程的资源),线程可以共享进程的堆.还有很多东西,拿java的JVM来举例,每次你启动一个main方法,这个含有main方法的主类就会被类加载器加载进内存,然后CPU会创建一个JVM进程,把这个类模板加载进元空间,对这个类执行静态变量,静态代码块.把静态变量,常量放进元空间中里面,如果你在main里面创建了一个线程,那这个线程的类模板也会被加载到元空间,在堆中创建改线程的实例,在进程的栈中会存在该线程在堆中的引用.并且这个线程还会拥有自己的栈,而进程的堆是可以被我们创建的线程共享的.
所以,我觉得线程就是为进程工作的,为什么现在会出现多线程呢,是因为多线程可以提高效率,CPU对于线程的切换消耗的资源很少,所以多个线程一起工作效率更高.而为什么会出现多进程呢?我觉得是因为有些业务需要对资源进行一个保护,也可以说是一个不可见的状态,我觉得多进程就跟docker差不多,进程间相互不可见,但是又可以调用.可以对资源进行管控和保护.
再提一嘴,JVM的gc就是一个守护线程,gc帮进程的堆进行清理,让进程更好的执行,不容易产生OOM异常.这个不能看出线程就是为进程工作的嘛.