进程与线程的区别
进程与线程之间的联系,会因平台的差异(OS 硬件),有极大的不同。即使在相同的平台下,进程与线程之间的联系也会因为JAVA 虚拟机的实现方式有很大的不同。不过一般而言,我们可以说,一个进程里可建立多条线程。
具体的说,可以有以下两点特别重要的:
1.线程之间的内存是共享的。
这是他们最大的差异。通常每个进程所拥有的内存空间是相互独立的。进程不能擅自读取,改写其他进程的内存空间。正因为这一点,进程就不必担心被其他进程破坏的危险。
而线程则是内存共享的,所以我们通常会让一个线程在内存上写入数据,而其他的线程来读取。
也因为这一点,使得线程之间的沟通可以使用很自然,简单的方式做到。而因为一个实例可以由多个线程访问,所以需要正确的进行共享互斥。
2.线程之间的context-switch较容易。
要切换执行中的进程,进程必须将自己现有的执行状态存储下来。,并将下一个要开始执行的进程以前所保留的context数据读回来。而这个信息切换的操作需要花费一定的时间。
切换执行中的线程,线程与进程一样,需要进行context-switch操作。然而线程所管理的context的信息比进程要来的少,一般而言线程之间的switch比起进程要快很多。
所以要进行多项紧密相关的工作,线程通常比进程来的实用。