开源一款轻量线程池项目

news2024/11/13 12:38:00

基于Arrow的轻量线程池

大家好,我是光城,最近花了几周业余时间,开发出这款轻量线程池,代码也全部开源啦,欢迎大家star。

本线程池的设计与实现会有涉及非常多的知识,这些内容也都会以视频的方式分享在知识星球中,随便一罗列就是一大堆,在学习本线程过程中你会学到:

- 如何从0构建一个项目

- 如何使用bazel管理整个项目

- 如何设计一个属于自己的线程池

- Arrow 项目与现在的线程池区别在哪里,我们做了什么改造

- 如何实战并发编程

- 如何做测试

等等。

1d0d122919496b6013311f4bab2e3c42.jpeg

本线程池是基于Apache Arrow项目的衍生版本。我们将Arrow项目中复杂的核心结构——线程池——完全剥离出来,形成了这个独立的项目。由于原始的线程池与Arrow项目本身的工具有深度依赖关系,因此我们在这个项目中对线程池进行了一些深度移除和改造,以保持与原始Arrow线程池的基础功能一致。一些改动包括:

  • 将Arrow的Future替换为std::future

  • 将Arrow的Result替换为std::optional

  • 重构了Submit接口,使用promise进行实现

通过这些改动,我们的目标是:

  • 使线程池更方便地作为其他项目的依赖库使用

  • 提供简单的方式来引入本项目的so库和头文件,以使用线程池功能

此外,这个项目还可以作为深入学习线程池设计与实现的资源。我们欢迎您探索并使用这个经过精心改进的线程池。

项目地址:参考下面

https://github.com/datawhalechina/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.a
  bazel-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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分析气象数据:向Python Cartopy地图中添加循环点

大家好&#xff0c;在使用Python和Cartopy对气候数据进行可视化分析的过程中&#xff0c;有一个叫做循环点&#xff08;cyclic point&#xff09;的术语&#xff0c;它在地理空间栅格数据可视化领域中很重要。 1.循环点的定义和作用 有时&#xff0c;当我们试图绘制地理空间数…

性能测试的基本概念和重要指标

这里写自定义目录标题 一、什么是性能测试二、为什么要学习性能三、性能测试与功能测试的区别1、性能测试和功能测试的区别&#xff1f;2、性能测试是在什么时候做?3、我们在做我们的产品的时候&#xff0c;我们只做功能不做性能可不可以&#xff1f;4、性能测试主要是这几个方…

金融计量学第2课堂-金融时间序列线性模型

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 一、相关性和平稳性 1、相关性 &#xff08;1&#xff09;皮尔森相关系数 皮尔森相关系数是最常见、最常用的一个相关系数计算方法。作为衡量两个随机变量x和y线性相关程度的重要指标&#xff0c;在这…

赋能智能智造-RK3568智能主板助力机器人产业高速发展

机器人作为现代制造业的重要一环&#xff0c;正在以惊人的速度推动着生产效率和智能化水平的提升&#xff0c;它们在生产线上的准确操作和高效工作&#xff0c;为企业带来了巨大的竞争优势。关于工业机器人的编程和控制技术&#xff0c;在过去几年中已经有了很多发展和新的应用…

十.Redis持久化

十.Redis持久化 一&#xff1a;RDB持久化二&#xff1a;AOF持久化三&#xff1a;扩展 redis持久化 Redis是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么服务进程退出&#xff0c;服务器中的数据库状态也会消失&#xff0c;所以Redis提供了持久…

《Spring系列》第18章 监听器Listener

前言 陆续阅读了Spring Boot源码中&#xff0c;有不少地方都用到了监听器。每次看到监听器的代码都一头雾水&#xff0c;不懂其中的设计理念&#xff0c;这次决定肝一篇监听器的博文。 一、监听器 1.概述 何为监听器&#xff1f;就是用来监听程序执行的。监听器可以做什么事…

青岛大学_王卓老师【数据结构与算法】Week05_03_队列的定义和特点_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

Vue3通透教程【十七】Vite构建TS版本Vue项目

文章目录 &#x1f31f; 写在前面&#x1f31f; 创建TS版本的Vue3项目&#x1f31f; 插件安装&#x1f31f; 写在最后 &#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相关技术文章&#…

DocFastSearchTool(文档快速搜索工具)开发日志

目录 项目介绍 项目调研背景 项目需求分析 开发环境 项目涉及基础知识点 项目设计 设计基础 项目框架or架构 项目框架的搭建 系统工具模块--遍历目录 SQLite数据库 在Windows上安装SQLite SQLite命令 SQLite-C/C的API 安装SQLite源码 数据库操作的重要接口 连接…

PB从入坑到放弃(三)数据窗口

PB从入坑到放弃&#xff08;三&#xff09;数据窗口 写在前面一、 数据窗口画板1.1 Design 视窗1.1.1 General tab页设置1.1.2 Generation tab页设置1.1.3 Prefixes tab页设置 1.2 Preview 视窗1.2.1 查找数据1.2.2 翻页1.2.3 增加、删除数据 1.3 Control List 视窗1.4 Data 视…

学生成绩分析项目

数据采集 导入必要的库 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns加载数据集 df pd.read_csv(D:\\桌面\\数据\\student_marks.csv)显示数据框的前几行 # 显示数据框的形状 print("Shape of the dataframe:", df.shape)#显示…

pycharm最新版默认菜单栏等工具不见了

原因 pycharm2022.3新版本&#xff0c;默认使用新UI&#xff08;如下图&#xff09;&#xff0c;这让很多小伙伴来说不太适应&#xff0c;我还是习惯旧版本的界面。在网上搜了许多恢复旧版本界面的教程&#xff0c;说的解决方案都是由于“手贱把菜单栏给隐藏了”&#xff0c;这…

C语言“教父“

在中国&#xff0c;"C语言教父"一般指的是C语言网的创始人黄老师。他通过C语言网为广大学习者提供了丰富的学习资源和知识分享平台&#xff0c;包括大量的C语言教程、C语言题目以及相应的文档、资源等等&#xff0c;为C语言的推广、教学做出了巨大的贡献和推动作用

Go自带库的使用说明

Go 中的时间操作 Golang中与时间有关的操作&#xff0c;主要涉及到 time 包&#xff0c;核心数据结构是 time.Time&#xff0c;如下&#xff1a; type Time struct {wall uint64ext int64loc *Location }1、获取时间相关函数 1.1 获取当前时间 // 返回当前时间&#xff0c…

腾讯云TRTC服务实现小程序语音/视屏会议

腾讯云TRTC服务的入门 TRTC 是腾讯云主打全平台互通的多人音视频通话和低延时互动直播解决方案。TRTC服务有多种客户端的支持&#xff0c;对于IOS、Android、React native等都支持的比较好&#xff0c;我们主要在于 IOS、Android、Web三端进行处理&#xff0c;其中 TRTC Web S…

HarmonyOS学习路之开发篇—流转

流转概述 介绍 随着全场景多设备生活方式的不断深入&#xff0c;用户拥有的设备越来越多&#xff0c;每个设备都能在适合的场景下提供良好的体验&#xff0c;例如&#xff1a;手表可以提供及时的信息查看能力&#xff0c;电视可以带来沉浸的观影体验。但是&#xff0c;每个设备…

网络变压器常见封装

1、单口千兆&#xff08;Single Port&#xff09; 封装类型常见型号Dimension SMD24_1 PIN Pitch&#xff1a;1.00 Length&#xff1a;15.1 Width&#xff1a;7.1/10.0 Height&#xff1a;6.00 JWD&#xff1a; SG24002G Group-tek&#xff1a; HST-24015SR SMD24_2 PIN…

pyspark

连接命令&#xff1a; pyspark --master spark://node1:7077 一个application 大任务可以分解成 多个小任务 jobs&#xff0c; 一个job又可以分解成多个 stages 阶段&#xff0c; 一个stage又可以分解成 多个tasks&#xff08;可以认为是两个线程&#xff09; standalone Zo…

使用Gradio库创建交互式滑块组件

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

QT DAY3

完善文本编辑器 1.mainwindow.h文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QDebug> #include <QIcon> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QMessageBo…