进程和线程的区别

  从发展的角度看,一个操作系统常常会需要同时进行多项工作,即使是在单用户操作系统,用户也可能会同时开启浏览器、word文档处理、电子词典等等应用,因为这些应用彼此之间关联比较小,相互之间又比较相识(他们需要占用I/O、file、data等等资源),为了便于管理,于是就有了进程(process)的概念。

  在传统的操作系统中,一个进程只有一个线程(thread)。这就带来了一些麻烦,比如在使用word文档的时候,用户的输入的时候,word程序无法同时检查用户拼写时候正确。线程的出现,就解决了这个问题。一个进程(比如word程序)内,同时有多个线程(进行输入处理的线程、进行拼写检查的线程),这样就使得并发性(parallelism)、吞吐量(throughput)提高了。

  从逻辑的角度看,因为线程是属于进程的,这样必然导致有进程必有线程,有线程必有进程,另外,线程比进程要轻量一些。进程和线程的区别可以总结为下面两点。

  (1)线程是轻量级的进程。这就导致了,线程之间的上下文切换(context switch)耗费的资源比进程少很多。

  (2)线程之间有共同的地址空间,进程之间地址空间不同。每一个进程拥有它自己的地址空间。在单个进程之中,可以由多个线程,线程之间共享地址空间。这同样是线程上下文切换存在优势的原因。但是,记住,线程不共享栈(stack)。阮一峰的《进程与线程的一个简单解释》中,比喻道,每个进程就像是工厂的一个车间,而线程是车间里的工人,工人们共享车间的空间等资源。

  

最后,最好的理解方法还是在实作中,通过代码来理解。

2013-05-03

 

 

 

 

posted on 2013-05-03 12:04  ZenLearner  阅读(127)  评论(0)    收藏  举报

导航