进程池组件闲聊

news/2024/7/7 15:50:33 标签: 进程池, 类模板, epoll

0x01 缘由

    在开发过程中,某些业务场景可能要使用到进程池或者线程池。主要目标是消除动态创建进程或进程时的开销。一般如果能够准确预测自己每个进程或进程的职责,这个都是在程序启动时就创建的,后期不会动态的去创建线程池或进程池。今天主要从几个方面来学习和探讨进程池或线程池技术。

0x02 场景

    常见的web服务器(需要处理较多的并发请求):
        常见的lighttpd/nginx等web服务器,以及常见缓存系统。
    常见的server端(游戏、直播等行业):
        要处理大量的并发请求,要减小响应延迟。

0x03 设计

    1、介绍
    进程池作为一个服务的基础组件需要考虑如下内容:1、可配置(进程容量)。2、动态扩容(到达负载是不是可以扩容?)。3、进程池相关操作。
    常规进程池模型:
    
    进程池中的所有子进程都运行着相同的代码,并具有相同的属性,比如优先级、PGID等。当有新的任务到来时,主进程将通过某种方式选择进程池中的某一个子进程来为之服务。
    负载均衡算法:随机算法和RR算法。
    主进程和子进程的同步:用队列、消息传递可以采用管道的方式。
    为什么要多进程或多线程实现并发呢?如果单进程或单线程则所有的工序就只能像流水线一样干完这件才能干那件,而且整个工序完成前仅只能干一件事。
    2、需求
    实现一个并发CGI服务:公共网关服务。类似一个请求来了,然后做相关操作。
    3、类设计
        实现半同步-半异步并发服务进程池类: 
                数据属性:进程集合、进程状态(休眠、征用)、消息管道(与主进程通讯)、进程角色、进程序号。
                操作属性:构造函数(创建进程池)、运行主进程、运行子进程、子进程的处理方法。
                设计思想:单例模式。
                网络架构:epoll模式。
                设计要求:能适配各种类型的操作。采用模板技术。
    
        CGI服务类:
               主进程:网络服务的监听。分发listen事件,如果有listen事件,则通过管道发送消息到子进程。
               子进程:统一的处理过程。子进程从管道中读取到消息,进行连接,建立的连接放入队列,进行读写事件处理。

    4、源码实现
        源码实现注意事项:g++不支持模板申明和定义分离。
        源码:https://github.com/pangyemeng/cgi_processpool  

0x04 总结

    此次主要在复习epoll 等API,以及设计一个类模板进程池技术等。

http://www.niftyadmin.cn/n/1460673.html

相关文章

Centos7下安装Docker

一,Docker简介 百科说:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制&#xf…

asp的网站能封装成app吗_网站如果封装成app

众所周知现如今开发设计一款app是能够非常容易还可以不易的,可是许多那时候自身一个人开发设计的工程项目的宏伟的,许多物品假如自身不可以做,还必须找有关的专业技术人员,那么网站该如何进行app封装呢?接下来就来给大…

如何快速融入一个研发团队?

0x01 缘由 最近就要马上入职新的公司了,离开上家公司也是迫不得已,但是为了自己的职业发展和眼界开阔,做出这样的选择已成自然。已经和三年多前的一次职业选择不同了, 毕竟已经有四年多的工作经验了,需要做事有章法。关…

进入docker中mysql容器的方法

文章目录 查看mysql容器名称使用命令进入容器查看mysql容器名称 执行docker ps命令 可以看到容器的名称为 mysqldocker 使用命令进入容器 docker exec -it mysqldocker bash 再使用命令mysql -uroot -p即可进入mysql 了

epoll两种模式(lt/et)复习

0x01 缘由 最近又在复习一些基础知识,现在看看epoll的相关知识点。 0x02 介绍 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况…

mysql in group by_mysql isn't in GROUP BY

今天安装新环境使用group by 语句查询报错isnt in GROUP BY!如图:以前时候也没有报啊~ 想到一定是新环境mysql版本过高了配置文件不一样了!isnt in GROUP BY报错翻译:意思要分组的列不在select的字段中(*这里重点 group by *号不代…

复习--友元

## 为什么要有友元? 实际开发过程中没有用过,这里只做文字和代码层面的理解和学习。 友元的作用:可以让对应的友元函数和类可以访问当前类的私有变量和保护类变量。 类的友元函数是定义在类外部,但有权访问类的所有私有&#x…

mysql lock not wait_关于MySQL的lock wait timeout exceeded解决方案

关于MySQL出现lock wait timeout exceeded; try restarting transaction 的解决方案。一、问题抛出在做查询语句时,MySQL 抛出了这样的异常:MySQL server error report:Array([0] > Array([message] > MySQL Query Error)[1] > Array([sql] >…