0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

workflow:适合C++开发者进阶的开源项目

嵌入式学习站 来源:嵌入式学习站 作者:嵌入式学习站 2022-11-25 16:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今天分享一个适合C++开发者进阶的开源项目,这个项目的名字叫workflow,项目地址如下:https://github.com/sogou/workflow

a4c940ae-6b11-11ed-8abf-dac502259ad0.png

项目适用场景

该项目是搜狗的服务器引擎,几乎搜狗所有的后端C++服务和其他几十家公司都在使用这个引擎,每日处理超百亿请求。

不仅如此,该项目也非常适合在嵌入式应用上实现网络的框架设计,框架设计是一个项目成功与否非常重要的环节,而网络在AIOT、智能家居智能硬件上尤其重要。

比如在项目中需要使用http,Workflow在设计上可以通过Cmake配置支持windows 或者 Linux 或 MacOS 等多个平台上的多个项目编译,而且,可以在不同平台上保持相同的接口

如果你新增一个嵌入式设备,比如ESP32,在服务器和客户端只需要维护一套代码,就可以完成自己的应用需求。

真正做到把云端的技术移植到嵌入式设备上运行。

适用于嵌入式几大特点:

1、支持多平台、多体系结构

多平台的代码说明在配置和耦合上考虑了很多设计上的细节。⽬前Workflow除了Linux、Windows、MacOS、Android以外,还可以愉快地在树莓派、国产⻰芯处理器等不同体系结构上运⾏。

2、编译快

Workflow除OpenSSL以外不依赖其他库,⽽且在接口层是没有模版的,因此编译速度⾮常快,不到一分钟即可编出一个可⽤的lib。

3、体积小、支持编译剪裁

Workflow的Kafka协议默认是不编译的,除此之外,还可以裁剪掉其他不常⽤的模块。

并且可以通过strip命令去掉符号链接,即可让库⽂件缩⼩到400k左右。

4、运行时内存小、调度快

作为一个异步调度的库,Workflow调度性能一直是⾮常好的。另外运⾏时内存占⽤也⾮常的小。

5、自定义协议非常方便

社区活跃以及项目负责人积极回复问题也是一个亮点,如果在框架搭建和移植上出现问题,在社区上提问都会得到快速响应。

a506848c-6b11-11ed-8abf-dac502259ad0.png

移植到嵌入式设备的开源支持

据悉⽬前已经有许多⽤户⽤到了嵌⼊式上了。github官方也做出了耐心的解释。

a5246c5e-6b11-11ed-8abf-dac502259ad0.png

框架能做什么

1、轻松的搭建server

不用多说,服务端框架如果不能搭建server那还玩啥了,但使用这个框架非常方便,以http server为例,只需要简单几行代码即可:

#include #include "workflow/WFHttpServer.h" int main() { WFHttpServer server([](WFHttpTask *task) { task->get_resp()->append_output_body("Hello World!"); }); if (server.start(8888) == 0) { // start server on port 8888 getchar(); // press "Enter" to end. server.stop(); } return 0; }

2、轻松高效的发起客户端请求

项目号称可作为万能异步客户端,目前支持http,redis,mysql、websocket和kafka协议,下面是官方给出的一个mysql的客户端示例:

int main(int argc, char *argv[]) { ... WFMySQLTask *task = WFTaskFactory::create_mysql_task(url, RETRY_MAX, mysql_callback); task->get_req()->set_query("SHOW TABLES;"); ... task->start(); ... }

以往的C++ server需要访问mysql时,可能使用的是传统的客户端。在一个线程下以同步阻塞的方式等待数据到来。如果有多个网络请求希望并发,那么用户需要管理好多个mysql cli对象。

workflow完美的解决了这一系列问题,把所有这种用户请求交给内部的poller线程统一管理,实现了高效的非阻塞IO行为,提升了server作为客户端请求数据时的性能表现。再也不用担心这种客户端行为影响server整体的性能。

支持自定义协议client/server:用户可构建自己的RPC系统,搜狗有个开源项目srpc就是以这个框架为基础实现的。

3、可建构异步任务流

支持串联,支持并联,支持串并联的组合体,也支持复杂的DAG结构。

4、异步IO

在Linux系统下可作为文件异步IO工具使用,性能超过任何标准调用。

5、通信与计算一体化

多数框架都着重于网络IO的效率问题,而计算与任务调度等需要用户自己实现,workflow会自动对任务进行调度,打通网络和磁盘等资源,特别适合需要网络通信的重计算模块。

任务流框架设计

在作者的设计理念中,一切业务逻辑皆是任务,多个任务会组成任务流,任务流可组成图,这个图可能是串联图、并联图,也可能是串并联图,类似于这种:

a5513f72-6b11-11ed-8abf-dac502259ad0.png

或者是这种复杂的DAG图:

a589510a-6b11-11ed-8abf-dac502259ad0.png

当然图的层次结构可由用户自定义,很牛的一点是支持动态创建任务流。

分享结束,希望小伙伴喜欢,嵌入式真需要不断学习去充实自己的大脑,相信你们都能够成为最厉害的程序员

最近很多小伙伴领取了程序员知识图谱,反馈很好。我们知道每一个技术领域都有它完整地知识体系,而良好的知识体系有助于技术人员的发展和成长,减少学习过程中所走的弯路。所以还没有领取的小伙伴赶紧领取起来吧!(底部有领取入口哦)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20155

    浏览量

    328973
  • C++
    C++
    +关注

    关注

    22

    文章

    2122

    浏览量

    76714
  • workflows
    +关注

    关注

    0

    文章

    6

    浏览量

    6112

原文标题:分享一个适合嵌入式的C++开源项目-Workflow

文章出处:【微信号:嵌入式学习站,微信公众号:嵌入式学习站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开发者为核心驱动开源项目迈向成熟

    11月21-22日,以“一切为了开发者——AI共智·开源共享”为主题的2025开放原子开源开发者大会在北京成功举办。大会聚焦人工智能、基础软件等重点方向,来自产业界、高校、科研机构和
    的头像 发表于 12-04 10:09 326次阅读

    2025开放原子开发者大会初创与高潜开源项目发展分论坛成功举办

    近日,2025开放原子开发者大会——初创和高潜项目分论坛在北京成功举办。这场聚焦行业新生力量的专业盛会,汇聚了开源领域资深实践、初创项目
    的头像 发表于 12-04 10:05 334次阅读

    2025开源鸿蒙开发者激励计划正式启动

    11月21日,2025开放原子开发者大会盛大启幕,聚焦“AI共智,开源共享”主题,吸引了来自全球的开发者、企业技术领袖、社区维护及高校科研力量参会。作为大会的重要组成部分,
    的头像 发表于 11-27 14:44 340次阅读

    RT-Thread荣膺开放原子开源先锋项目,社区开发者斩获“开源贡献之星”|新闻速递

    近日,2025开放原子开发者大会在京开幕。大会举行了“中国开源创新力量致谢仪式”,向操作系统、数据库、人工智能三大技术领域28个开源先锋项目中作出卓越贡献的47位
    的头像 发表于 11-24 18:48 214次阅读
    RT-Thread荣膺开放原子<b class='flag-5'>开源</b>先锋<b class='flag-5'>项目</b>,社区<b class='flag-5'>开发者</b>斩获“<b class='flag-5'>开源</b>贡献之星”|新闻速递

    开发者眼中的开源魅力

    、openKylin、OpenTenBase开源项目社区的开发者,聆听他们与开源相遇、相伴、相成长的故事,感受那份超越代码本身的价值与魅力。
    的头像 发表于 06-24 11:38 716次阅读

    从“开发者孤岛”到“生态星河”:开鸿Bot如何重构开源鸿蒙开发体验

    在中国操作系统发展史上,“开发者”似乎从来都是一个边缘角色。他们是开源社区中最活跃的群体,却也是最常被忽视的那群人。具体到开源鸿蒙社区,其生态构建初期,诸多开发者曾坦言,“鸿蒙很好,但
    的头像 发表于 06-10 17:12 1458次阅读
    从“<b class='flag-5'>开发者</b>孤岛”到“生态星河”:开鸿Bot如何重构<b class='flag-5'>开源</b>鸿蒙<b class='flag-5'>开发</b>体验

    华为亮相2025开源鸿蒙开发者大会

    近日,开源鸿蒙开发者大会2025(以下简称大会)在深圳成功举办。大会以开源鸿蒙5.1 Release版本发布为契机,聚焦开源鸿蒙技术革新和社区发展,全面呈现“Powered
    的头像 发表于 05-29 09:07 1094次阅读

    开发者分享】开源硬核玩家集结:这些MCU板子泰酷了!

    前言本篇文章内容主要收录了由开发者基于先楫半导体高性能MCU开发的各类DIY开源硬件项目,涵盖不同应用方向与创意实践。部分项目代码可直接在本
    的头像 发表于 05-26 17:31 1315次阅读
    【<b class='flag-5'>开发者</b>分享】<b class='flag-5'>开源</b>硬核玩家集结:这些MCU板子泰酷了!

    2025开源鸿蒙开发者大会圆满落幕

    近日,开源鸿蒙开发者大会2025(OHDC.2025,简称“大会”)在深圳隆重开幕。大会正式发布了开源鸿蒙5.1 Release版本,举行了开源鸿蒙应用技术组件共建启动、
    的头像 发表于 05-26 17:03 1135次阅读

    深开鸿CEO王成录:开发者开源鸿蒙生态的原点

    5月24日,深开鸿正式发布全国首款面向开发者开源鸿蒙学习平台——开鸿Bot系列产品。这是开源鸿蒙在开发者终端领域的关键落地,更是深开鸿贯彻“以开发
    的头像 发表于 05-26 12:06 729次阅读
    深开鸿CEO王成录:<b class='flag-5'>开发者</b>是<b class='flag-5'>开源</b>鸿蒙生态的原点

    开发者开源鸿蒙故事

    近日,在以“一切为了开发者”为主题的“2024开放原子开发者大会暨首届开源技术学术大会”上,开源鸿蒙5.0 Release版本正式发布,备受各方关注。该版本在系统完备度、分布式创新、
    的头像 发表于 01-06 10:28 1221次阅读

    AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT

    ,真正做到所“键”即所得。 这一创新框架的出现,正是为了解决开发者在迁移C/C++项目到HarmonyOS NEXT时面临的核心痛点。传统的NAPI接口调用复杂,学习成本高,
    发表于 01-02 17:08

    2024开放原子开发者大会暨首届开源技术学术大会成功举办

    近日,以“一切为了开发者”为主题的2024开放原子开发者大会暨首届开源技术学术大会在武汉成功举办。大会为众多开源项目
    的头像 发表于 12-23 14:23 819次阅读

    2024年度国内活跃开源项目开发者在武汉揭晓

    近日,2024年度国内活跃开源项目&开发者致谢仪式,亮相2024开放原子开发者大会暨首届开源技术学术大会开幕式。
    的头像 发表于 12-23 11:25 951次阅读

    高校开源开发者培养分论坛亮点前瞻

    数字化时代,开源成为了全球软件与技术创新的重要驱动力,从Linux操作系统到Android移动平台,从人工智能框架到云计算基础设施,一个个开源项目遍地开花。然而,在开源蓬勃发展的背后,
    的头像 发表于 12-17 14:06 772次阅读