日期:2014-05-20  浏览次数:20690 次

Java多线程1—程序、进程、线程比较
许多人对于程序、进程、线程这几个概念许多人都分的不是很清楚,下面我们就简单的介绍一下它们的区别。

程序是计算机指令的集合,它以文件的形式存储在磁盘上。程序是通常我们所写好的存储于计算机上没有执行的指令的集合,通俗的讲就是我们自己写的代码。我们写的代码不可能只是为了存储吧,必须运行才不会浪费我们的辛苦,等到我们将我们的代码运行了,就产生了进程。

进程:是一个程序在其自身的地址空间中的一次执行活动。通常的程序是不能并发执行的。为了使程序能够独立运行,应该为之配置一些进程控制块,即PCB;而由程序段,相关数据段和PCB三部分构成了进程实体。通常我们并不区分进程和进程实体,基本上就代表同一事物。进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源。

20世纪60年代人们提出了进程的概念,在OS中一直都是以进程作为能独立运行和拥有资源的基本单位。但是进程间的切换比较麻烦费时,所以在20世纪80年代人们为了提高系统内程序并发执行的程度,进一步提高系统的吞吐量,提出了比进程更小的能独立运行的基本单位。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。一个进程可以同时拥有一个或者多个线程,这几个线程共享同样的数据。

现在的CPU几乎都是多核的了,这样多线程的程序,运行起来就更加流畅。下面我们通过图片来比较一下单线程和多线程:
图片如没显示请访问http://blog.csdn.net/mengxiangyue/article/details/6864100


这个就好比我们算一道数学题(2+3)*(5-3),如果我们使用左边的单线程,只能是先算2+3然后算5-3,最后结果相加。但是如果我们使用右边的多线程,我们可以同时对2+3和5-3进行运算,然后再对最后的结果相加。我想哪个运行的比较快就不用说了,另外多线程在图像处理,多用户通信等方面用户都很多。

可能读者会说如果我们用的是单CPU的PC那么他们就差别不大了,但是现在的事实是现在的PC基本都是多核了,所以多线程是为了我们更好的将程序移植到多核的CPU上。还有一点就是对于线程的切换,比进程的切换速度快的多,多线程更好的发挥CPU的效率。

写的不好,如果哪里错了希望大家指出。希望对你有帮助。

------解决方案--------------------
呵呵,楼主辛苦了,我是来接分的,哈哈。
------解决方案--------------------
楼主辛苦,支持
------解决方案--------------------
太好了。懂了一点,,
------解决方案--------------------
好吧,那我就挑一个错:需要注意的是,线程间的切换是需要时间的(如果是单核的话,实际上每次只能运行一个线程,就算是多核,估计通信也会有延迟),所以楼主举的例子稍微有点不恰当,像这么小的计算量,直接计算(2+3)*(5-3)会比分两个线程要快。
------解决方案--------------------
帮lz补充一点:
1.在多核CPU下,线程可能会被任何一个CPU核执行(注:这是指的是Java,并不是所有语言都如此)
2.线程不是所有情况下的最优方案,实际上有些系统下 大量线程将导致系统性能下降。
------解决方案--------------------
我是来学习的,先感谢LZ分享
------解决方案--------------------
支持!
------解决方案--------------------
多cpu的,可以用软件分配
------解决方案--------------------
支持一下
------解决方案--------------------
支持!