您的位置:首页 > 其它

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

2016-05-10 17:06 211 查看

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

分叉(fork)是UNIX术语,当分叉一个进程(一个运行的程序)时,基本上是复制了它,并且分叉后的两个进程都从当前的执行点继续运行,并且每个进程都有自己的内存副本(比如变量)。一个进程(原来的那个)成为父进程,另一个(复制的)成为子进程。如果你是一个科幻小说迷,可以把它们想象成并行的宇宙(parallel universe)。

分叉操作在时间线(timeline)上创建了一个分支,最后得到了两个独立存在的进程。幸好进程可以判断哪个是原进程哪个是子进程(通过查看fork函数的返回值)。因此它们所执行的操作不同(如果相同,那么还有什么意义?)。

在一个使用分叉的服务器中,每一个客户端机连接都利用分叉创造一个子进程。父进程继续监听新的连接,同时子进程处理客户端。当客户端的请求结束时,子进程就退出了。因此分叉的进程是并行运行的,客户端之间不必互相等待。

因为分叉有点耗费资源(每个分叉出来的进程都需要自己的内存),这就存在了另一个选择:线程。线程是轻量级的进程或子进程,所有的线程都存在于相同的(真正的)进程中,共享内存。资源消耗的下降伴随着一个缺陷:因为线程共享内存,所以必须确保它们的变量不会冲突,如果在同一时间修改同一内容,这就会造成混乱。这些问题都可以归结为同步问题。在现代操作系统中(Windows除外,它不支持分叉),分叉实际是很快的,现代的硬件能比以往更好地处理资源消耗。如果不想被同步问题所困扰,分叉是一个很好的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: