Files
CPlusPlusThings/proj/README.md

134 lines
6.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
- [重磅项目](#重磅项目)
- [学习方式](#学习方式)
- [HOT: 新增项目](#hot-新增项目)
- [线程池](#线程池)
- [内存池](#内存池)
- [手把手100行写一个简易版Mutex](#手把手100行写一个简易版mutex)
- [内容](#内容)
- [涉及内容](#涉及内容)
- [七种方式玩转condition\_variable](#七种方式玩转condition_variable)
- [内容](#内容-1)
- [涉及内容](#涉及内容-1)
- [duckdb + levledb](#duckdb--levledb)
- [C++那些事十日狂练升级版](#c那些事十日狂练升级版)
# 重磅项目
## 学习方式
深入学习以下项目可扫码加入知识星球或添加个人wx: **gcxzhang**,备注: 加入星球
<img src="../img/cpp.jpg" alt="知识星球" width="400" height="300">
## HOT: 新增项目
### 线程池
手把手教会该线程池,可以戳这里,附:视频+文字教程,包会。
https://mp.weixin.qq.com/s/ceQoyHVMVmaXL3BNt25O4g
这个项目的线程池是基于Apache Arrow项目的衍生版本。我们将Arrow项目中复杂的核心结构——线程池——完全剥离出来形成了这个独立的项目。由于原>始的线程池与Arrow项目本身的工具有深度依赖关系因此我们在这个项目中对线程池进行了一些深度移除和改造以保持与原始Arrow线程池的基础功能
一致。一些改动包括:
- 将Arrow的Future替换为std::future
- 将Arrow的Result替换为std::optional
- 重构了Submit接口使用promise进行实现
通过这些改动,我们的目标是:
- 使线程池更方便地作为其他项目的依赖库使用
- 提供简单的方式来引入本项目的so库和头文件以使用线程池功能
此外,这个项目还可以作为深入学习线程池设计与实现的资源。我们欢迎您探索并使用这个经过精心改进的线程池。
[线程池-飞书文档](https://hmpy6adnp5.feishu.cn/docx/BEKBdq0egoxmxNx3X3ZcHzkUnwd)
## 手把手100行写一个简易版Mutex
### 内容
项目名称简易互斥锁SimpleMutex
项目描述简易互斥锁SimpleMutex是一个基于原子变量和信号量的互斥锁实现用于保护并管理多线程环境下的共享资源访问。它提供了一种简单而有效的方式来确保在多线程并发访问时只有一个线程可以同时访问受保护的资源从而避免数据竞争和不一致性。基于 POSIX 标准的信号量库实现,包含 Catch2 单元测试,附带了基于 Catch2 框架的单元测试用于验证互斥锁的正确性和稳定性使用bazel编译google编码规范。
[https://mp.weixin.qq.com/s/SqtdadmCaJNSK10fScFlUw](https://mp.weixin.qq.com/s/SqtdadmCaJNSK10fScFlUw)
### 涉及内容
其中涉及C++知识RAII、信号量、lock_guard、线程安全编程还能学习以下内容
1.Bazel构建系统了解如何使用Bazel来管理和构建C++项目。Bazel是一种高效、可扩展的构建工具可用于管理复杂的项目结构、依赖关系和构建流程。
2.Catch2测试框架掌握如何使用Catch2来编写单元测试。Catch2是一个功能强大且易于使用的C++测试框架,可以帮助你编写清晰、可读性高的测试用例,提高代码质量和可靠性。
3.原子操作:了解原子操作的概念和使用方法。原子操作是一种并发编程技术,可以确保对共享变量的操作是不可中断的,避免了竞态条件和数据不一致的问题。
4.fetch_add函数学习如何使用fetch_add函数进行原子的加法操作。fetch_add是一种原子操作函数它可以在并发环境中安全地对共享变量进行原子加法操作避免了数据竞争。
5.内存序了解不同的内存序memory order对多线程程序的影响。
6.锁的自动管理引入lock_guard类实现锁的自动获取和释放。lock_guard是C++标准库提供的一种锁管理工具,它在构造函数中获取锁,在析构函数中释放锁,确保在任何情况下都能正确释放锁,避免因为异常或早期返回等情况导致锁没有释放的问题。
7.RAIIResource Acquisition Is Initialization原则了解如何使用对象的生命周期来管理资源的获取和释放确保资源的正确获取和释放避免资源泄漏。
## 七种方式玩转condition_variable
[https://mp.weixin.qq.com/s/33ZXOA-tzhbBKMFWS26kCw](https://mp.weixin.qq.com/s/33ZXOA-tzhbBKMFWS26kCw)
### 内容
1.CPU轮询等待版单生产者单消费者
该版本使用了简单的轮询机制,生产者不断地检查消费者是否已经消费完数据。这种模式简单直接,但效率较低,因为生产者在没有数据时仍然在忙等待。
2.等待通知版单生产者单消费者:
该版本引入了等待通知机制,生产者在没有数据时会等待消费者的通知。这种模式避免了忙等待,提高了效率,同时减少了资源消耗。
3.等待通知版单生产者多消费者:
在这个版本中,引入了多个消费者,它们共享生产者的数据。生产者在产生数据后,通知所有消费者进行处理。
4.等待通知版多生产者多消费者:
这个版本支持多个生产者和多个消费者,生产者之间和消费者之间共享数据。生产者在产生数据后,通知所有消费者进行处理。
5.单生产者多消费者并行版:
在这个版本中,引入了并行处理机制,多个消费者可以同时处理数据。生产者产生数据后,多个消费者并行处理,提高了整体处理速度。
6.多生产者多消费者并行版:
这个版本支持多个生产者和多个消费者,并且允许并行处理。多个生产者并行产生数据,多个消费者并行处理数据,提高了整体并发能力。
7.支持Lambda回调的优雅停止版
在这个版本中引入了Lambda回调函数用于优雅地停止并发处理。可以通过调用回调函数来停止生产者和消费者的处理并进行清理工作。
### 涉及内容
1.多线程和并发编程通过这些版本的描述您可以了解到如何在C++中使用多线程和并发编程来处理并行任务。您将学习如何创建线程、控制线程的执行、线程间的数据共享和同步等。
2.同步机制:在这些版本中,介绍了不同的同步机制,如轮询等待、等待通知和回调函数。您将学习如何使用互斥锁、条件变量、信号量等来实现线程间的同步和协调。
3.Lambda表达式在支持Lambda回调的版本中您将学习如何使用C++11引入的Lambda表达式来编写简洁而灵活的回调函数以实现优雅的停止机制。
4.代码组织和构建工具提到了支持bazel编译的能力这可以让您学习如何使用构建工具来组织和管理复杂的C++项目。
5.condition_variable、mutex、unique_lock
## duckdb + levledb
leveldb 源码剖析已更毕
duckdb 持续更新
## C++那些事十日狂练升级版
已更毕