桐花万里丹山路,雏凤清于老凤声。
1.线程与进程的关系
进程是一个执行中的程序,线程是进程中的一个指令流(控制流程)
线程存在于进程中,就是说:
a.线程不能独立运行
b.线程使用的是系统分配给进程的资源
2.线程与进程的区别
a.多个进程的内部数据和状态都是完全独立的,而一个进程中多个线程会相互影响.具体说:
从java内存模型的角度看,java内存中包括(粗略)程序计数器、栈、堆、方法区。
其中程序计数器、栈是线程私有的。堆、方法区是线程共享的。
程序计数器负责记录每条语句执行的数序。
栈主要存储局部变量表、操作栈、动态链接、方法出口等信息。
堆主要存储对象和数组。
方法区存储类的元数据(class文件中信息)
其中的意义后续详述。
b.线程是轻量级的,进程是重量级的。
多线程程序比多进程程序消耗的资源少,因为多一个线程只需占用进程内的一部分资源;多一个进程需要系统重新为进程分配资源空间。
线程间通信比进程间通信更方便、成本更低。
3.多线程的意义
提高效率:
多核CPU可以同时运行多个线程,最大化利用系统资源。
灵活控制程序:
把一些异步的流程,通过一些线程的组织,在一个进程中完成。
站在进程的角度,达到了同步化。