当前位置: 首页 > news >正文

跨平台进程池背后的思想

        背景是基于业务需求,需要实现一个跨平台的项目。项目中由于有部分功能存在大量计算,所以打算单独分配一个进程去进行计算。
        进程池的实现与线程池的实现逻辑上如出一辙。但是实现上进程池的实现会比线程池实现复杂的多,主要比较复杂的点的就在于并发安全的任务队列。考虑到跨平台的要求,我使用的是boost库中用于进程管理的boost::process,具体使用请参阅相相关文档。
        目前是进程管理没有问题,下面就是需要考虑进程间的通信和并发控制的问题。进程间并发控制其实是比较好解决的,使用boost库中进程相关的有名锁、有名条件变量等即可,其都是基于全局共享内存,当然关于全局共享内存是如何在进程之间互相识别的这个问题,其实我们也能从其前缀得到一些启发:“有名”,那固然是你创建这些控制条件变量的时候取一个名字,很明显这个名字与全局共享内存块形成了一个映射,并且这个映射也是全局的,以便所有进程都能访问该变量。这一点你在程序中创建对应的对象并且使用的时候你就能深有体会。
        下面就是“最赖皮”的部分,任务队列的实现。我们都知道,关于池类技术都离不开一个生产者-消费者模型,可能是一对一也可能是多对多,横竖不管怎样,就是生产者将任务生产到一个队列,消费者基于这个队列进行消费。如果是在单进程多线程模型中这种队列十分好设计,因为维护队列的动态内存在我们程序中可控制的,可以依据任务的大小和数量进行分配。但是在多进程间,全局的共享内存只能进行固定的分配,没有


http://www.mrgr.cn/news/53882.html

相关文章:

  • 前端vue框架配置基础信息详解分析
  • ford面试准备
  • 导出Excel的常用方法:从前端到后端的全面指南
  • 【SpringBoot】12 Json数据校验
  • 嵌软面试一百问(持续更新中)
  • 单片机STC8H8K64U开发板_RA6809开发板 驱动彩屏显示
  • 【数据结构与算法】之二分查找
  • 一个纹理分割的例子
  • Python基础——类型注解
  • javaWeb项目-Springboot+vue-XX图书馆管理系统功能介绍
  • 深度学习面试笔试之循环神经网络(RNN)、门控循环单元(GRU)、长短期记忆(LSTM)
  • 一、go入门
  • 安全基线加固
  • Python中的数值及其计算
  • 学习eNSP对准备华为认证有哪些帮助?
  • 【C++打怪之路Lv11】-- stack、queue和优先级队列
  • MySQL 本地社区版安装(不登录) mysql官网链接
  • HarmonyOS NEXT 应用开发实战(七、知乎日报轮播图的完整实现)
  • 集合论基本概念——紧致性(compact或compactness)
  • 【v5Lite】识别+串口
  • 大厂面试真题-了解云原生吗,简单说一下docker和k8s
  • vue之打包配置环境
  • Qt贪吃蛇-游戏房间窗口(3)
  • 设置了超时时间但是不起作用,浏览器里的setTimeout有 bug?
  • Linux下的进程解析(level 2)
  • 闪迪sd卡如何恢复删除的内容?这3种方法很实用