- 博客(64)
- 收藏
- 关注
原创 解决C++编译时的产生的skipping incompatible xxx 错误
解决C++编译时的产生的skipping incompatible xxx 错误
2024-07-06 10:19:44
2614
3
原创 《C++并发编程》之正确使用thread和jthread
C++11从语言层面引入了多线程编程的能力,使得开发者可以通过标准库提供的 thread 等库实现跨平台的多线程编码。标准库中的 thread 等库为开发者屏蔽了不同平台下的多线程实现细节,提供了统一的编程接口,并且可以和标准库中的其它库一同使用,提高程序的开发效率。
2024-05-06 10:51:54
1084
原创 【muduo源码学习】源码分析之Channel、EventLoop和Selector
在本篇本章中,将重点介绍该模型中的IO事件处理部分在 muduo 网络库中是如何实现的。
2024-05-06 10:45:42
709
原创 c++11引入的constexpr关键字
c++11引入了 constexpr 关键字,容易与 const 关键混淆。下面从两个方面理解 constexpr 关键字的用途。
2024-04-24 10:50:45
838
1
原创 【muduo源码学习】多线程下的 one loop per thread
多线程多Reactor模型的实现,主要涉及 Thread、EventLoopThread 和 EventLoopThreadPool 这三个类,下面依次进行介绍。
2024-04-16 08:49:36
1212
原创 【muduo源码学习】one-loop-per-thread核心原理
在 TCP 网络编程中,这里我们特指在单机的环境下,主要关注两件事。第一,如何正确的处理TCP的连接和断开,以及正确处理数据的收发;在错综复杂的网络环境中,这并非易事,涉及很多细节。第二,如何榨干机器的性能,即如何让单台机器在已有的硬件条件下处理尽可能多的连接请求;这需要设计一种高效的网络模型。
2024-04-16 08:45:13
1444
原创 std::bind中传入的实参变量的生命周期不能短于生成的可调用对象的生命周期
在使用bind生成可调用对象时,bind的中传入的实参变量的生命周期不能短于生成的可调用对象的生命周期。
2024-01-24 14:03:07
513
原创 Linux中timerfd系列函数使用指南
Linux中,timerfd_create、tiimerfd_settime、timerfd_gettime 函数使用指南。
2024-01-23 09:43:14
2192
原创 C语言中的标准IO
本文对 Linux 下C语言的标准IO进行总结,所有代码示例均在 Ubuntu-20.04、GCC 11.3.0 环境下运行通过。
2023-12-29 10:19:52
1250
原创 优先考虑基于任务的编程而非基于线程的编程
而 async 以一种隐式的方式开启一个异步任务,”看不到线程“,从编码模式上看,和同步编程的模式类似,对比基于线程的编程方式,基于任务的设计为开发者避免了手动线程管理的痛苦(这种调用方式将线程管理的职责转交给C++标准库的开发者),并且自然提供了一种获取异步执行程序的结果(即返回值或者异常)的方式。async 和 thread 的另一个重要区别为,async 没有将创建的线程 detach 的机制,因此在调用 async 的作用域中,会等待 async 执行的异步任务完成之后才会离开其作用域。
2023-12-14 21:07:45
904
原创 C++中异常的栈展开概念
C++中的异常栈展开是指,当某个函数中有异常产生(这里不考虑是主动抛出的还是被动产生的),在异常被捕获之前的函数调用链上,函数不会正常执行返回,即异常产生之后的程序逻辑不会被执行。
2023-11-30 20:47:11
599
原创 python 的 import 机制
ImportError: attempted relative import with no known parent package 是如何造成的?
2023-11-19 14:53:00
322
原创 从语言层面了解线程(std::thread)使用的里里外外
如何利用理解 thread 的 joinable 和 unjoinable 状态,如何使用 future 和 promise 在线程之间通信。
2023-10-24 19:36:49
167
原创 从一道面试题开始学习C++标准库提供的并发编程工具
一个空列表,用两个函数(只可调用一次)轮流写入值(一个写奇数,一个写偶数), 最终实现列表的值为1-100,有序排列。
2023-10-19 22:59:52
615
1
原创 关于Raft的Q&A
Raft 是一种共识算法,用来解决分布式环境下服务器节点的数据一致性的问题。共识算法保证了一群节点对外提供的服务像一台单独的节点对外提供服务一样,当集群中的少数节点出现故障时,任然能正常的像一个节点一样对外提供服务。使用 Raft 的应用有分布式键值存储数据库,和。
2023-10-15 19:59:39
95
原创 使用STL algorithm 解决一些算法问题
原地将 [first, last) 中的元素重新排列为下一个字典序更大的排列。若当前排列存在下一个更大的排列,则返回 true,并生成下一个更大排列;若不存在,则返回 false,按从小到大的顺序排列。思路:对序列 [1, 1, 1, 0, 0, 0, 0] 做全排列,对于每个排列,输出数字1对应的位置上的元素。从 7 个不同元素中取出 3 个元素的所有组合。,返回删除后数组的新长度。范围内的每个元素分配连续递增的。删除重复出现的元素,使每个元素。
2023-09-15 15:14:03
99
原创 muduo网络库学习笔记之日志系统
muduo日志系统采用的是多生产者单消费者模型,基本思路是,前端线程(产生日志消息的线程)和后端线程(负责将缓冲区中的日志信息写入磁盘文件的线程)各自维护一块buffer,前端线程维护bufferA,后端线程维护bufferB。
2023-08-10 16:19:39
282
原创 在多线程环境中使用pthread_once函数初始化全局资源
POSIX线程库提供了一个名为 `pthread_once` 的函数,可以在多线程环境下,确保某个函数只被调用一次。
2023-08-08 13:57:05
209
原创 C++中的static关键字
从两个角度来分析 static 关键字:与类相关和与类无关。与类无关,即C语言中的static关键字部分;与类相关,即C++中static关键字与类成员。
2023-06-25 20:03:09
95
原创 pytorch单机多卡训练--完整示例代码
实现了多卡训练中数据的 shuffle 功能,此外,为了保证每个epoch训练中,数据shuffle成功,需要在每个 epoch 的 dataloader 前调用。在多人共用多卡的情况下,并不是任何时刻每张卡都是空闲的,因此,在模型训练和推理时,需要指定可用的gpu。如上所示,每个gpu的一个 batch size 为32,如果gpu的可用数量为4,那么有效的 batch size 为 32 x 4;若一个服务器上有多个GPU设备,可以使用多GPU设备进行训练,充分利用多GPU计算的性能,缩短训练时长。
2023-06-21 11:36:55
12996
9
原创 四种强制转换 reinterpret_cast、const_cast、static_cast、dynamic_cast
四种强制转换 reinterpret_cast、const_cast、static_cast、dynamic_cast
2023-06-20 22:46:49
187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人