进程池&线程池

本文介绍了进程池和线程池的概念,强调了预先创建并维护进程或线程池的优势。重点讲述了线程池的实现难点,如线程间的文件描述符传递和同步,并提到了进程池的实现,包括子进程的阻塞和主进程的文件描述符传递。
摘要由CSDN通过智能技术生成

进程池和线程池概述

进程池和线程池相似,所以这里我们以进程池为例介绍,下面对进程池的讨论完全适用于线程池(如果没有特殊声明)。

进程池是由服务器预先创建的一组子进程,这些子进程的数目在3~10个之间(典型情况)。线程池的数量应该和CPU数量差不多。

进程池中的所有子进程都运行者相同的代码,并具有相同的属性。因为进程池在服务器启动之初就创建好了,所以每个子进程都相对“干净”,即它们没有打开不必要的文件描述符(从父进程继承而来),也不会错误的使用大块的堆内存(从父进程复制得到)。

当有新的任务到来时,主进程将通过某种方式选择进程池中的某一个子进程来为之服务。相比于动态创建子进程,选择一个已经存在的子进程的代价显然要小得多。至于主进程选择哪个子进程来为新任务服务,有两种方式:

  1. 主进程使用某种算法来中东选择子进程。最简单常用的算法是随机算法和RoundRobin(轮流选取算法),但是更智能的算法将使任务在各个工作进程中更均匀的分配,从而减轻服务器的整体压力。
  2. 主进程和所有子进程通过一个共享的工作队列来同步,子进程都睡眠在该工作队列上。当有新的任务到来时,主进程将任务添加到工作队列中。这将唤醒正在等待任务的子进程,不过只有一个子进程将获得新任务的“接管权”,它可以从工作队列中取出任务并执行,而其他子进程
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值