Java菜鸟面试准备-多线程-进程和线程的区别

很显然这个问题要回答的深入没有深厚的基础真不行。翻了几篇博客,看了《java编程思想》中相关的论述。简要回答一下这个问题,不知道能不能应对面试。之前在网上翻的也没想发博客记录,那几篇博客地址就没于是这就成了一篇缺少参考资料的blog。

进程是具有一定独立功能的程序在一定的数据集合上的一次运行活动,是操作系统资源分配和调度的独立单位;线程是进程的执行单元,是进程内的调度实体。线程基本不拥有系统资源,与同一个进程的其他线程共享进程中所拥有的所有资源。

  1. 他们的根本区别是,进程是资源分配的基本单位;线程是调度和执行的基本单位;
  2. 他们在关系上是包含与被包含的关系。一个进程里可以包含有多个线程,但至少包含一个线程;线程是进程的一部分,不能独立执行,必须依存于进程中执行。
  3. 两者在资源拥有上也很大差别。进程是拥有资源的独立单位,每个进程都拥有独立的内存空间、系统资源(比如打开的文件、IO设备等资源)。而线程仅拥有自己独立的运行栈、程序计数器,但是要和同一个进程中的其他线程共享进程的代码段、数据段和IO设备等系统资源。
  4. 由于拥有的资源不同,两者系统开销也有较大区别。由于在创建或撤销进程时,系统要分配或回收资源,在进行进程切换时,涉及到当前进程CPU环境的保存以及新被调度的进程的CPU环境的设置。因此进程的创建、撤销、切换开销较大。每个线程有自己独立的运行栈、程序计数器,但是同一个进程中的多个线程共享进程的全部资源,因此线程的创建和切换,开销更小。

 总的来说,进程关注的是资源的管理、线程关注的是CPU的运行。可以说进程就是为多个或者一个下线程提供上下文环境的容器,线程只负责执行部分,不管资源。多进程和多线程都可以实现并发。由于同一进程的多个线程共享进程的公有资源,线程的创建和切换代价更小、而且利用共享数据线程间通信也更方便,因此使用多线程实现并发比使用多进程实现并发性能更高

你可能感兴趣的:(Java面试准备)