基于Arrow的轻量线程池
基于Arrow的轻量线程池
大家好,我是光城,最近花了几周业余时间,开发出这款轻量线程池,代码也全部开源啦,欢迎大家star。
本线程池的设计与实现会有涉及非常多的知识,这些内容也都会以视频的方式分享在知识星球中,随便一罗列就是一大堆,在学习本线程过程中你会学到:
- 如何从0构建一个项目
- 如何使用bazel管理整个项目
- 如何设计一个属于自己的线程池
- Arrow 项目与现在的线程池区别在哪里,我们做了什么改造
- 如何实战并发编程
- 如何做测试
等等。

本线程池是基于Apache Arrow项目的衍生版本。我们将Arrow项目中复杂的核心结构——线程池——完全剥离出来,形成了这个独立的项目。由于原始的线程池与Arrow项目本身的工具有深度依赖关系,因此我们在这个项目中对线程池进行了一些深度移除和改造,以保持与原始Arrow线程池的基础功能一致。一些改动包括:
将Arrow的Future替换为std::future
将Arrow的Result替换为std::optional
重构了Submit接口,使用promise进行实现
通过这些改动,我们的目标是:
使线程池更方便地作为其他项目的依赖库使用
提供简单的方式来引入本项目的so库和头文件,以使用线程池功能
此外,这个项目还可以作为深入学习线程池设计与实现的资源。我们欢迎您探索并使用这个经过精心改进的线程池。
项目地址:参考下面
https://github.com/Light-City/light-thread-pool
1.如何编译
➜ tpl bazel build //src:thread_pool
WARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.
WARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.
INFO: Analyzed target //src:thread_pool (36 packages loaded, 168 targets configured).
INFO: Found 1 target...
Target //src:thread_pool up-to-date:bazel-bin/src/libthread_pool.abazel-bin/src/libthread_pool.dylib
INFO: Elapsed time: 1.748s, Critical Path: 1.34s
INFO: 8 processes: 3 internal, 5 darwin-sandbox.
INFO: Build completed successfully, 8 total actions 2.如何使用
所有的用例放在examples目录
2.1 编写一个简单的case
参见:helloworld
// Create a thread pool
auto threadPool = GetCpuThreadPool();
if (!threadPool) {std::cerr << "Failed to create thread pool" << std::endl;return 1;
}// Submit tasks to the thread pool
threadPool->Spawn([]() { std::cout << "hello world!" << std::endl; });// Wait for all tasks to complete
threadPool->WaitForIdle();// Shutdown the thread pool
threadPool->Shutdown(); 其他case:
设置线程池数量
如何停止回调
如何异步处理
3.如何测试
测试基于catch2编写,所有测试位于tests目录
可以测试tests目录下面的其他测试,只需要替换submit_test为对应的test即可。
bazel test //tests:submit_test
相关文章:
基于Arrow的轻量线程池
基于Arrow的轻量线程池 大家好,我是光城,最近花了几周业余时间,开发出这款轻量线程池,代码也全部开源啦,欢迎大家star。 本线程池的设计与实现会有涉及非常多的知识,这些内容也都会以视频的方式分享在知识星…...
泛微OA E-Office V10 OfficeServer 任意文件上传漏洞复现
声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 漏洞简介 泛微e-ofice是一款标准化的协同0A办公软件,泛微 …...
spring-cloud-starter-gateway踩坑
1.bean of type org.springframework.http.codec.ServerCodecConfigurer that could not be found. 需要将项目中用到的spring-boot-starter-web依赖给去掉 去掉以下的 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…...
视频SDK开发,多平台SDK快速接入
随着科技的不断发展,视频已经成为了企业业务中不可或缺的一部分。无论是在线教育、企业培训还是产品展示,视频都发挥着至关重要的作用。为了满足企业对视频应用的需求,美摄视频SDK应运而生,为企业提供了一站式的视频解决方案。 一…...
面试官:如何理解CDN?说说实现原理?
一、是什么 CDN (全称 Content Delivery Network),即内容分发网络 构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降…...
C语言 牛客网习题 10.20 day2
1.求最小公倍数 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。 1≤a, b≤100000 输入描述: 输入两个正整数A和B。 输出描述: 输出A和B的最小公倍数。 #include <st…...
SpringCloud: sentinel热点参数限制
一、定义controller package cn.edu.tju.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockException; import org.springframework.web.bind.annotation.PathVariable; import org.springframewo…...
PDF编辑阅读 PDF Expert v3.5.2
PDF Expert是由Readdle开发的一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 以下是PDF Expert的特点: PDF编辑:PDF Expert提供了丰富的PDF编辑功能,包括添加、删除、移动…...
新技术:WEB组态能页面嵌套、属性继承吗?
目前市面上的工业组态或数据大屏工具有不少,也有很多0代码、无代码、低代码、零代码、低代码概念。 有没有可以支持图纸嵌套、属性暴露的?或者说页面任意嵌套、属性多继承暴露到上层? 比如页面A有输入框,页面B有对话框ÿ…...
【C++ Primer Plus学习记录】复习题
1.如何声明下述数据? a.actor是由30个char组成的数组。 char actor[30]; b.betsie是由100个short组成的数组。 short betsie[100]; c.chuck是由13个float组成的数组。 flaot chuck[13]; d.dipsea是由64个long double组成的数组。 long double dipsea[64]; …...
【LeetCode】62. 不同路径
1 问题 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径?…...
【lesson13】进程地址空间收尾
文章目录 进程地址空间存在的原因原因一原因二原因三 重新理解什么是挂起? 进程地址空间存在的原因 原因一 凡是非法访问或者映射,OS都会识别到,并终止该进程。 例子: 我们会发现我们定义的字符串常量只有只读权限,…...
Microsoft Edge中使用开源的ChatGPT
一、双击打开浏览器 找到:扩展,打开 二、打开Microsoft Edge加载项 三、Move tab新标签 获取免费ChatGPT 四、启用Move tab。启用ChatGPT。 扩展 管理扩展 启用 五、新建标签页,使用GPT 六、使用举例 提问 GPT回复...
【C语言精髓之指针】结构体指针(->与.两个运算符的区别)
/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 通信与信息专业大二在读 * copyright 2023.10* COPYRIGHT 原创技术笔记:转载需获得博主本人同意,且需标明转载源* language C/C* IDE Base on Mic…...
SpringCloud 微服务全栈体系(一)
第一章 认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 一、单体架构 单体架构:将业务的所有功能集中在一个项目中开发ÿ…...
Echarts自定义柱状图
目录 效果图 echarts官网找相似图 将柱状图引入html页面中 自定义柱状图 将不需要的属性删除 编辑 修改图形大小 grid 不显示x轴 编辑 不显示y轴线和相关刻度 编辑 y轴文字的颜色设置为自己想要的颜色 修改第一组柱子相关样式(条状) …...
LuatOS-SOC接口文档(air780E)-- ioqueue - io序列操作
ioqueue.init(hwtimer_id,cmd_cnt,repeat_cnt) 初始化一个io操作队列 参数 传入值类型 解释 int 硬件定时器id,默认用0,根据实际MCU确定,air105为0~5,与pwm共用,同一个通道号不能同时为pwm和ioqueue int 一个完…...
探讨Socks5代理技术的原理及其在不同领域的应用
Socks5代理:实现网络连接的智能之选 作为一种网络代理协议,Socks5代理技术通过转发网络数据包,实现了客户端和服务器之间的代理传输。其独特的特性在跨界电商、爬虫数据分析、企业出海和游戏体验等领域发挥着关键作用,为用户提供…...
sql注入的基本手法
目的 通过sqk注入获取数据内容 掌握sql注入基本手法 我们这里使用 1.联合注入 就是利用union select 语句 两条语句 同时执行 实现跨库跨表查询 条件 两条select语句查询结果具有相同列数 对应列数数据类型相同 简单的步骤 1.目标分析 ?id…...
8.1 C++ 标准输入输出流
C/C语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。…...
5步构建个性化数据可视化仪表盘:开源工具集成实战指南
5步构建个性化数据可视化仪表盘:开源工具集成实战指南 【免费下载链接】tiled Flexible level editor 项目地址: https://gitcode.com/gh_mirrors/ti/tiled 在当今数据驱动的时代,如何快速构建一个功能强大、美观实用的数据可视化仪表盘成为开发者…...
终极Windows激活指南:KMS_VL_ALL_AIO智能脚本一键解决系统激活难题
终极Windows激活指南:KMS_VL_ALL_AIO智能脚本一键解决系统激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经因为Windows系统显示"需要激活"而感到困扰&a…...
R语言空间分析、模拟预测与可视化高级应用
随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也达到130多个。在本…...
mysql SQL语句根据时间获取去年时间
验证去年日期是否正确-- 测试:传入 2025-01-01 → 返回去年同日 20240101 SELECT DATE_FORMAT(DATE_SUB(STR_TO_DATE(20250101, %Y%m%d), INTERVAL 1 YEAR), %Y%m%d) AS last_year_date;列子SELECTtoday.tjrq,today.dwmc,today.brye / 10000 AS brye,today.brxz,-- …...
金融数据聚合终极指南:用Colly实现多平台数据整合
金融数据聚合终极指南:用Colly实现多平台数据整合 【免费下载链接】colly Elegant Scraper and Crawler Framework for Golang 项目地址: https://gitcode.com/gh_mirrors/co/colly 在当今数据驱动的金融市场中,快速获取和整合多平台数据已成为投…...
Qwen3.5-2B保姆级教程:从开机自启到日志排查的完整运维指南
Qwen3.5-2B保姆级教程:从开机自启到日志排查的完整运维指南 1. 项目概述 Qwen3.5-2B是一款20亿参数的轻量级多模态大语言模型,专为本地化部署和离线使用场景设计。作为通义千问系列的最新成员,它在保持轻量化的同时,提供了强大的…...
SCons构建MDK工程翻车实录:从‘No module named building’到完美运行的踩坑全指南
SCons构建MDK工程实战:从报错排查到工程定制的完整指南 第一次接触SCons构建MDK工程时,那种从满屏红色报错到最终看到"Build Complete"的成就感,至今记忆犹新。作为替代传统IDE手动配置的自动化方案,SCons确实能显著提升…...
谷歌Next年度大会智能体登场,OpenAI/微美全息构筑“AI芯片+智能体”生态受瞩目
北京时间周四,美国云服务巨头谷歌(GOOG.US)举行2026 Next大会,发布了旨在推动企业工作流程全面转向智能体的“代理式企业”(Agentic Enterprise)技术栈,涵盖第八代TPU、智能体软件平台等一系列前…...
G-Helper实用指南:重新定义华硕笔记本控制体验
G-Helper实用指南:重新定义华硕笔记本控制体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, and…...
分布式事务终极解决方案:Seata原理与落地实践
分布式事务终极解决方案:Seata原理与落地实践 在微服务架构中,分布式事务一直是开发者面临的难题。传统的事务管理方式难以应对跨服务的数据一致性需求,而Seata(Simple Extensible Autonomous Transaction Architectureÿ…...
