引子

今天跟大家分享一个我在实际工作中运用得最多的框架:异步执行队列。

在开发中,我们可能经常会遇到一些执行时间需要很长的任务,如果让程序处理完任务再继续往下走,可能会耽误到程序的主体业务。我们通常的的做法是创建一个FIFO的任务队列,任务来了就将它丢到队列里,会有一个任务处理线程不间断地去队列里取出任务来执行。我们今天讲的这套框架不是处理所有类型的任务,而是处理具有相同数据结构的同一类任务。

数据结构和接口实现

一个任务,说白了就是一堆待处理的数据,今天这套框架是针对同一类任务的,所以它的处理函数是固定的。
这样子,我们需要实现一个任务队列,队列的底层可以用链表来实现。我们需要创建一个任务处理线程,不间断地去队列里取出任务来执行。


我们先来定义一个任务的数据结构:

typedef struct task{
    xxx;//数据
}TASK_T;

我们需要把这些任务串联起来,所以里面还得增加一个TASK_T指针,指向下一个任务:

typedef struct task{
    xxx;//数据
    TASK_T *next;
}TASK_T;

实际上我更喜欢采用内核的链表处理方式:

struct list_head {
    struct list_head *next, *prev;
};
typedef struct task{
    xxx;//数据
    struct list_

Linux C高阶(7)异步处理框架C实现相关推荐

  1. java 并发框架源码_Java并发编程高阶技术-高性能并发框架源码解析与实战

    Java并发编程高阶技术-高性能并发框架源码解析与实战 1 _0 Z' @+ l: s3 f6 r% t|____资料3 Z9 P- I2 x8 T6 ^ |____coding-275-master ...

  2. java 并发框架源码_某网Java并发编程高阶技术-高性能并发框架源码解析与实战(云盘下载)...

    第1章 课程介绍(Java并发编程进阶课程) 什么是Disruptor?它一个高性能的异步处理框架,号称"单线程每秒可处理600W个订单"的神器,本课程目标:彻底精通一个如此优秀的 ...

  3. Linux C高阶(21)监听键盘单个按键输入

    文章目录 1 前言 2 终端IO的三种模式 2.1 canonical 模式 2.2 nocanonical 模式 2.3 raw 模式 3 终端控制结构 1 前言 编写测试工具的时候,需要实时的读取 ...

  4. Linux C高阶(5)arm架构函数帧栈分析

    本文研究的是arm架构的函数帧栈,阅读者需要有arm汇编基础,不过本文涉及的汇编指令不是很多. 理论上来说,ARM的15个通用寄存器是通用的,但实际上并非如此,特别是在过程调用的过程中. 以下4个寄存 ...

  5. Linux C高阶(14)C语言宏定义你所不知道的事

    文章目录 规避语法错误 什么时候使用宏定义 规避语法错误 众所周知,C语言支持宏定义,并且功能强大.举个例子: #include <stdio.h> #define swap(a,b) { ...

  6. Vue 高阶组件和 mixins

    对于习惯使用 Vue 框架的人来说,高阶组件(HOC)这个概念是相对比较陌生的:高阶组件在 React 框架中是比较常见的一个概念,但是 Vue 中也是可以使用到高阶组件的: 一.高阶组件 1.什么是 ...

  7. 【Java进阶营】Java异步NIO框架Netty实现高性能高并发

    1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用 ...

  8. 【性能测试】如何用一条命令完全掌握linux系统性能监控(top高阶用法)

    目  录 一 引 言 二 top命令高阶用法 场景1:采样3次,采样间隔为10s: 场景2:采样2h,采样间隔为10s,性能数据保存到test.csv文件中: 一 引 言 熟悉CentOS linux ...

  9. Linux 高阶命令进阶(一)

    Linux 高阶命令进阶 (一)输出重定向 1. > :正确覆盖输出,会覆盖掉原先的文件内容 把文本写入文档中                # vim test                 ...

最新文章

  1. python 中 is 与 == 的区别
  2. 个人建议之PHP面试的准备
  3. oracle 12c创建可插拔数据库(PDB)与用户详解
  4. Android Wear开发者预览版入门
  5. limit mongodb 聚合_MongoDB 聚合操作(转)
  6. C#进阶之路(一):委托
  7. NLP深度学习:PyTorch文本分类
  8. java12章_从零开始学Java 第12章 异常处理
  9. php larvel https,laravel 解决强制跳转 https的问题
  10. spring注解@Lazy
  11. 不同介质中的运动目标检测(虚拟潜望镜)
  12. 电脑录音,教你电脑怎么录音
  13. SAST、DAST、IAST几种测试工具的比较
  14. 张鹏:腾讯云直播PCDN加速方案(附视频回放)
  15. React学习笔记(八)--- HooK
  16. RF 电路设计中的常见问题及解决方案
  17. 设计模式学习笔记(二十一:访问者模式)
  18. linux 远程扫描仪,在ubuntu桌面配置一个网络打印机和扫描仪的方法
  19. 鸿蒙 手游sdk 开发教程
  20. 【实操】如何安装及查看云监控

热门文章

  1. 团体程序设计天梯赛-练习集 L2 阶段全部题解
  2. 运西瓜货车轮胎过热自燃 众人砸瓜救火(图)
  3. NOIP2016考前做题(口胡)记录
  4. ubuntu系统服务器维护,Ubuntu Server系列各项服务的安装和维护 Apache部分
  5. 前端开发:JS生成32随机数的方法
  6. 弹性体模拟(弹性力学)
  7. mysql设置general-log_设置mysql的general log
  8. 努力更新技术博客,赠人玫瑰手留余香
  9. MeterSphere使用之接口测试
  10. 利用langchain-ChatGLM、langchain-TigerBot实现基于本地知识库的问答应用