自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 c++实现轻量和高效的日志系统

1、支持多线程日志输出,输出效率足够高,每秒达到10000+行日志的输出(程序超出这个需求,可能要考虑是不是日志打印太多了);3、日志自动清理,超过一定天数的日志应自动删除(当然可以通过额外的定时脚本达到这个目的),避免长期运行后积累的日志过多,过大;3、日志格式容易不规范,关键信息可能会缺失,比如严重程度、日志的准确时间、输出日志的线程、函数名称、文件行号等等;2、日志文件自动切分,应避免单个日志文件过大,切分方式可以是按天、小时、分钟、文件大小超出限制等;

2024-05-20 17:26:53 482

原创 一种轻量的C++无锁多线程框架

上一篇《》已经讲清楚了如何实现各种情况下的无锁队列,那么无锁的多线程框架该提上日程。c++11后,多线程编程已经变得比较简单了,运行时开启一个线程的代价也不是很大,但是语言本身提供的功能还是比较像原料,在复杂的业务需求下,我们需要形成一个多线程的编程框架。通常情况下,程序中的线程都会赋予某些固定的角色,比如《》中,网络线程被赋予的特定的角色,并且持有自己需要管理的数据(网络连接),又比如游戏服务器中经常需要把某些功能或者某些数据交给固定的线程处理;

2024-05-16 13:50:19 1280 1

原创 利用std::atomic实现无锁队列

延迟删除我们需要先标记链表上被删除的元素,然后再找一个适当的时机销毁这些被标记的元素,目前可以轻易想到的是时间上的延迟和预留足够的数量两种方式,其中时间上的延迟需要对被标记的元素记录一个时间戳,真正执行删除操作时与当前时间进行比较,基于时间的延迟删除,在队列吞吐量特别大时,会占用较多的内存;在队列创建时,我们让Head和Tail共同指向一个不存储数据的内存,从此这两个指针就可以毫不相干了,后续生产消费中,Tail总是预留一个不存储数据的内存节点,而Head则只需要完成自己的指向操作。

2024-05-15 18:13:14 900

原创 C++优雅地读写json

c++读写json有很多库,比如jsoncpp、rapidjson等都相当优秀,但觉得还不是很优雅,每个字段都需要列举出来,并读入定义好的内存结构中,然后再进行使用,写json则是相反的过程。通常需要定义好结构体(或者定义一堆变量),然后逐个字段进行人工编码处理。对于变长的数组,我们可以使用JsonArray,对于不确定key的情况,我们可以使用JsonMap,其中JsonMap<String>应可以应对数值类型不确定的情况,当然此时的value不能是一个json 的object。

2024-05-14 19:32:37 387 1

原创 一个简单易用的轻量化的c++网络库

c++的网络库有很多,作为一个合格的后端开发工程师,很多人或多或少都手撸过TCP通信模块,原因都是因为网上的轮子多是面向通用化的需求,在各自项目中还是需要对轮子进行一定的加工,比如著名的asio,它只实现了对网络字节流的高效收发方面的处理,剩下的事情需要自行完成,很难使用它快速开发网络服务。一个简单易用的网络库,应该可以使用少量的代码实现一个网络服务,不需要过多关注网络通信层面的细节,只需要实现自己的业务逻辑。接下来我们只需要创建服务器和客户端, 创建必要的链接,ping-pong测试就完成了。

2024-05-14 14:50:11 610 1

原创 基于c++反射实现游戏逻辑的编辑

若你的游戏服务器是使用其他语言开发的,这篇文章对你的帮助可能小一些,在我从业的这些年,早期的时候大量的游戏服务器都是使用c++开发的,特别是MMO类型的游戏。在游戏中,玩法通常千变万化,但是多年的总结下来后,策划的玩法思路跳不出这样一个圈圈:在特定条件下触发特定的事情,这些特定的事情触发后成为或者产生新的条件,然后触发后续的事情。第一步,我们可以通过反射,做json的最基本的解析,我们可以把整个json文件通过反射方式读入到一个结构体中(开源库里有示例),唯一要做的就是按照json文件的结构写结构体;

2024-05-10 18:18:08 824 2

原创 c++实现反射功能

这是一个无入侵的,并且带有反射代码生成工具的开源库。程序员一般都很懒,能自动实现的一般不想逐行敲代码,我们需要一个自动生成反射代码的工具,在这个开源库中,提供了一种基于llvm+clang进行代码生成的工具,在我们程序代码中只需要把需要反射的成员、函数打上下面的标记,利用反射工具就可以自动生成代码。反射工具会分析头文件,由于反射工具的REF_EXPORT_FLAG宏是生效的, 因此它看到标记了需要反射的成员前面都会多出了一个特殊的struct,基于此就可以把需要反射的信息提取出来,并生成我们需要的代码。

2024-05-08 17:10:05 1161 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除