当前位置: 首页 > 科技观察

一种多线程场景下的灵活软件架构

时间:2023-03-17 22:23:32 科技观察

简介说到现代大型软件架构,很容易想到分布式、缓存数据库、负载均衡、资源虚拟化、微服务、组件等。然而,如果你老跟我说分布式、并行之类花里胡哨的框架,却不告诉我代码怎么写,那你就是耍流氓。作为一个草根软件开发者,我更关心的是如何编写main函数,以及如何将大量的功能函数分配给不同的线程,而这是最底层的软件架构,也是最重要的。今天,我将向大家介绍一个灵活的可编程软件框架。可以说这个框架可以满足大部分场景下的软件功能、性能和灵活性需求。1一个基本的软件运行结构图上图中,main函数在主线程中,子线程1和子线程2都用来处理任务,任务存放在任务队列中;每个任务需要两个阶段完成,先经过Stage1处理,再经过stage2处理;stage1需要两个函数处理,即函数A和函数B;stage2需要一个函数处理,即函数C.2如何将函数和队列部署到不同的线程?说到底,每个线程运行的都是一些基本的功能函数,我们可以把实现某个功能的函数划分成一个函数集合。本例中子线程1运行函数集1,子线程2运行函数集3。这样做的时候需要明确以下几点:同一个任务队列可以被多个线程调度多个线程可以调度同一个任务队列同一个线程可以部署不同的函数集同一个函数集也可以部署在不同的线程上threads我们可以灵活地将线程、函数集合、任务队列的具体绑定关系写在配置文件中,比如json、yaml等,进程启动后,通过加载配置文件实现资源部署。为什么多个任务队列可以链接到一个线程?因为任务队列可以有不同的类型,比如系统任务和用户服务。3如何安排线程上的功能?在业务线程的实际运行过程中,我们看到的只是一个接一个的函数,那么如何控制函数的执行顺序呢?最简单的解决方案是状态机。线程每执行一个循环,都是从初始状态开始,经过中间状态,到最终状态结束。当任务到达每个状态时,会进行相应的动作处理(即对应一个有序的函数集),并根据任务处理的结果选择跳转到的下一个状态,直到遇到最终状态,当前任务处理完成。接下来,从任务队列中取出一个任务,循环调度。状态机循环调度完任务4个线程后,哪些函数集会真正运行?如前所述,部署框架指定了每个线程上需要运行哪些功能集。但是当线程真正启动起来的时候,我们是根据状态机来调度的,状态机也规定了每个状态需要执行哪些动作(也就是函数集),所以我们是否执行deployment中定义的函数集framework或者execute状态机中相应的函数集呢?答案当然是在状态机中设置相应的函数。总结在本文中,我试图总结出一种基于多线程并行技术的灵活的软件架构。这个架构的核心有两点:一是资源部署(即队列、函数、线程??的绑定关系);另一种是基于状态机原理的调度。每个状态处理完后如何选择下一个状态,直接关系到软件。表现。朋友们,随着摩尔定律的失效,对软件性能的需求越来越高,你有更好的软件架构,可以实现CPU多核多线程资源的最大利用,高效的调度框架吗?