分叉(forking)和线程处理多连接

        简单的说,分叉占用的资源较多,且在客户端很多时可伸缩性不佳(但只要客户端数量适中,分叉在现代UNIX和Linux系统中的效率很高。如果系统有多个CPU,效率就更高了);而线程化可能带来同步问题。

        对进程(运行的程序)进行分叉时,基本上是复制它,而这样得到的两个进程都将从当前位置开始继续往下执行,且每个进程都有自己的内存副本(变量等)。原来的进程为父进程,复制的进程为子进程。如果你是科幻小说迷,可将它们视为并行的宇宙:分叉操作在时间轴上创建一个分支,最终得到两个独立存在的宇宙(进程)。所幸进程能够判断它们是原始进程还是子进程(通
常查看函数fork的返回值),因此能够执行不同的操作。

        在分叉服务器中,对于每个客户端连接,都将通过分叉创建一个子进程。父进程继续监听新连接,而子进程负责处理客户端请求。客户端请求结束后,子进程直接退出。由于分叉出来的进程并行地运行,因此客户端无需等待。

        鉴于分叉占用的资源较多(每个分叉出来的进程都必须有自己的内存),还有另一种解决方案:线程化。 线程是轻量级进程(子进程),都位于同一个进程中并共享内存。这减少了占用的资源,但也带来了一个缺点:由于线程共享内存,必须确保它们不会彼此干扰或同时修改同一项数据,否则将引起混乱。这些问题都属于同步问题。在现代操作系统(不支持分叉的Windows除外)中,分叉的速度其实非常快,较新的硬件能够更好地应付其资源消耗。如果你不想处理麻烦的同步问题,分叉可能是不错的选择。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值