码迷,mamicode.com
首页 > 编程语言 > 详细

并行处理:分叉(fork)和线程(thread)

时间:2016-05-12 16:33:37      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:



       并行处理:分叉(fork)和线程(thread)

       分叉(fork)是UNIX术语,当分叉一个进程(一个运行的程序)时,基本上是复制了它,并且分叉后的两个进程都从当前的执行点继续运行,并且每个进程都有自己的内存副本(比如变量)。一个进程(原来的那个)成为父进程,另一个(复制的)成为子进程。如果你是一个科幻小说迷,可以把它们想象成并行的宇宙(parallel universe)。
       分叉操作在时间线(timeline)上创建了一个分支,最后得到了两个独立存在的进程。幸好进程可以判断哪个是原进程哪个是子进程(通过查看fork函数的返回值)。因此它们所执行的操作不同(如果相同,那么还有什么意义?)。
       在一个使用分叉的服务器中,每一个客户端机连接都利用分叉创造一个子进程。父进程继续监听新的连接,同时子进程处理客户端。当客户端的请求结束时,子进程就退出了。因此分叉的进程是并行运行的,客户端之间不必互相等待。
       因为分叉有点耗费资源(每个分叉出来的进程都需要自己的内存),这就存在了另一个选择:线程。线程是轻量级的进程或子进程,所有的线程都存在于相同的(真正的)进程中,共享内存。资源消耗的下降伴随着一个缺陷:因为线程共享内存,所以必须确保它们的变量不会冲突,如果在同一时间修改同一内容,这就会造成混乱。这些问题都可以归结为同步问题。在现代操作系统中(Windows除外,它不支持分叉),分叉实际是很快的,现代的硬件能比以往更好地处理资源消耗。如果不想被同步问题所困扰,分叉是一个很好的选择。

并行处理:分叉(fork)和线程(thread)

标签:

原文地址:http://blog.csdn.net/iw1210/article/details/51364729

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!