首页 > 编程知识 正文

回调函数异步执行,系统采用二级反馈队列调度算法进行进程调度

时间:2023-05-04 15:21:55 阅读:250547 作者:3435

异步实现方式一:异步回调

异步回调的实现依赖于多线程或者多进程

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。

同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口);

回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。(例如:alarm库通过算法接口注册回调,算法模块通过异步调用alram的回调接口实现消息的通知)


例如:

项目:码流回调;

A库:通过B库(编码库)提供的attach接口注册回调,绑定回调函数onCapture();
B库:底层编码-编码数据-整理成frame格式-触发回调;

注意:码流回调对象是client取流时创建的,所以销毁该对象之前,必须通过B库提供的detach接口解绑回调;

在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类成为回调类,回调类的对象成为回调对象。对于象C++这些兼容了过程特性的对象语言,不仅提供了回调对象、回调方法等特性,也能兼容过程语言的回调函数机制。

Windows平台的消息机制也可以看作是回调的一种应用,我们通过系统提供的接口注册消息处理函数(即回调函数),从而实现接收、处理消息的目的。由于Windows平台的API是用C语言来构建的,我们可以认为它也是回调函数的一个特例。

异步实现方式二:消息队列

消息队列的实现依赖于多线程或者多进程

创建一条独立线程。

可以把需要异步处理的逻辑作为一条消息发送到独立线程,发送完立即返回继续运行。

独立线程取消息队列中的消息进行逻辑处理。

例如:

项目:报警库报警信息上传;

线程A(SDK模块线程):负责从std::list列表获取消息、处理消息、发送给接收端;
线程B(Alarm报警库/算法库线程):检测到报警时,将报警信息组成SDK模块需要的结构信息,发送给SDK模块;(SDK模块需提供接口给Alarm模块)

项目:OBServer/SDK管理client;

COBServer new一个消息队列对象m_msgptr,并起线程接收该对象发送过来的消息;
有clinet连接成功时创建COBDeal,并通过构造传参把m_msgptr保存到COBDeal;
COBDeal退出或者异常需要销毁时,通过m_msgptr发送消息给COBServer来delete掉COBDeal;

消息的处理者,关心数据结构,所以消息的处理者定义消息结构(参数)和提供接口;

参考资料:
https://blog.csdn.net/hahaha_val/article/details/79642678
https://blog.csdn.net/hahaha_val/article/details/79670067

无论如何如何重新分配内存JavaScript事件循环的概念是什么Docker安装jenkins实现微服务多模块打包的示例代码Python Scala中怎么使用def语句定义方法Python Numpy常用函数总结

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。