prefork 进程池模型,用在 UNIX 和类似的系统上比较多,主要是由于写起来方便,也容易移植,还不容易出问题。要知道,如果采用线程模型的话,用户线程、内核线程和混合型线程有不同的特性,移植起来就麻烦。
one fork per child 模型,一个连接一个进程,效率一般比 prefork 低。Apache HTTPd 默认是用 prefork
模型,即预先 fork() 出来一些子进程缓冲一下,用一个锁来控制同步,连接到来了就放行一个子进程,让它去处理。vsFTPd 是 one
fork per child 模型。HTTP 是短连接协议,客户端拿了文件就走了,而 FTP 会话的时间长一些,进程池模型就不是主要考虑的因素。
进程池模型是一类多处理模型,建议看看 Apache 的 mod_mpm,以及相关文档。《UNIX 网络编程》第一卷第三版的部分内容也可以阅览一下。
进程的内存空间.文件描述符..等运行时信息..都比线程多得多..进程切换时肯定要记录这些信息..所以肯定比线程慢
apache也增加了对多线程的支持,而且有多种实现模式可选,ftpd一个连接的持续时间很长,线程的创建切换时间短的优势根本体现不出来,还带来诸如难编写难调试等缺点,prefork的多进程模式是理想的选择。
阅读(858) | 评论(0) | 转发(0) |