Chinaunix首页 | 论坛 | 博客
  • 博客访问: 359163
  • 博文数量: 102
  • 博客积分: 2070
  • 博客等级: 大尉
  • 技术积分: 1019
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-14 11:07
文章存档

2011年(1)

2010年(34)

2009年(37)

2008年(30)

我的朋友

分类: LINUX

2009-08-18 11:21:46


线程是进程中的实体,一个进程可以拥有多个线程,而一个线程必须有一个父进程。线程与父进程的其他线程一起共享进程的所有资源。线程本身不拥有系统资源,只是拥有一些运行必须的数据结构而已。
线程有内核态线程和用户态线程之分。
随着硬件设备的发展,拥有多处理器的系统成为了网络应用中的主流。在传统大的UNIX系统中,一个进程在某个时刻只能使用一个处理器。为了充分发挥多处理器的性能,程序必须设计成多进程,并将这些进程分配到不同的处理器上运行。
当调用fork函数创建新的进程后,每个进程都运行在自己的虚拟地址空间中。除此之外,系统还必须为新创建的进程创建代码断,数据断和堆栈断。这种多任务大的实现方式使得在创建新进程时,需要花费大量的资源。
而由于各个线程使用相同的地址空间,不同线程共享了绝大部分的数据,因此,启动一个线程的开销要比启动进程的开销要小的多,进程间的切换可开销也要大于线程间的切换开销。有资料表明,进程在系统资源方面的开销是线程的30倍左右。因此,在资源小消耗上,进程与线程相比,没有任何的优势。
由于进程都运行在自己的虚拟地址空间中,必须使用特殊的方式能实现不同进程间的通信。而线程与此完全不同,各个线程都是运行在共同的地址空间中,不同线程可以直接访问其他线程的相数据。当然,这对于程序员编写程序来说,会带来一定的问题,如何保证多线程环境下程序运行的稳定性是必须要考虑的一个重要问题。

阅读(1184) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~