自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最简单的协程调度器(附带源码)

/这个会在每个线程单独备份一个 所以各自线程的调度器都能存这,确保整个程序知道主调度器。代码分三部分thread.h thread.cpp main.cpp封装了协程调度器。ui密集型,文件操作,网络操作,数据库操作,一般设置为cpu/(1-0.9)2.任务都会放到一个链表里,调度器按顺序去执行对应的任务。最佳线程数目=(线程等待时间+线程cpu时间/线程时间)cpu密集型,操作内存处理业务,cpu数+1或cpu数。线程等待的时间越大,线程数就要设置越大。3.单个线程只有一个调度器。

2025-04-04 00:15:00 244

原创 高性能服务器之协程封装(附带源码)

4.如何确保主和子协程,主协程通过GetThis第一次调用后创建,可以看看GetThis的代码(主协程没有回调函数std::function<void()> m_cb),子协程会有回调函数std::function<void()> m_cb,我的封装就是通过私有化了Fiber()构造函数让你们不能调用,确保当前作用域代码只有一个主协程,多个主协程会造成逻辑混乱因为只有一个全局变量保存了主协程t_main_fiber。

2025-04-03 00:15:00 203

原创 高性能服务器之初识协程(附带测试用例源码)

著名的协程库有Boost.Coroutine2 ,libco和libgo大家可以去使用或熟悉这对于高性能开发有很大的帮助。下一篇我会写一个有关协程调度的类,做一个有关协程的服务器框架下面是线程,进程和协程的一张关系图,侧面说明协程对高性能的提升的重要性。

2025-04-02 07:53:31 683

原创 高性能服务器之锁(附带源码)

常用的锁的种类1.互斥锁 2.自旋锁 3.原子锁 4.读写锁有的锁会让线程休眠,有的会来回检测是否解锁,这样会导致消耗大量的cpu资源。服务器是使用高并发和多线程场景最多的应用,锁的开销影响了服务器的性能,在不同业务场景用对应的锁能确保服务器资源更高效的利用。

2025-04-01 09:17:52 781

原创 高性能服务器半同步/半反应堆线程池,实现一个类似web服务器能浏览器访问(附带源码和效果图)

可以作为一个博客网站服务器,各位可以学习html的格式来设计自己的网站,可以看看效果图如何使用浏览器打开服务器下对应的html文件。这只是先给你们展示一下源码后期会详细的讲解所有服务器设计的巧妙之处,之后还有一个使用协程实现的服务器附带日志库。​任务队列缓冲:主线程(Reactor)快速接收请求并存入队列,工作线程(Sync)按需处理,解决突发流量冲击。1.动态复用线程:通过固定数量的工作线程池处理任务,避免频繁创建/销毁线程的系统开销。主线程异步接收请求(非阻塞),工作线程同步处理任务,实现高吞吐量。

2025-03-29 16:41:08 734

原创 Halcon License (持续更新)

我也是在学习halcon的时候发现这个优秀的博主特地分享給大家,这样就不用每天都去找halcon的license。

2025-03-27 12:04:00 206

原创 c++服务器学习从零开始:第二期linux高性能服务器设计之半同步半异步进程池(附带源码和效果图有注释)

1.子进程在启动时预先创建并常驻内存,避免频繁创建/销毁进程的开销(进程创建成本高)。大家可以按自己的需求修改对应的逻辑部分实现自己的代码。2.动态分配任务給子进程实现负载均衡,减少资源竞争。3.子进程独立运行,单个进程崩溃不会影响整体服务。4.异步层:仅关注事件监听和任务分发。5.同步层:仅关注业务逻辑处理。下面是客户端要的文件名。下面是服务器的逻辑位置。

2025-03-27 11:59:19 704

原创 c++服务器学习从零开始:第二期服务器的高性能个人归纳

Reactor模式,要求主线程负责监听文件描述上是否有事件发生,有就立即将该事通知给工作线程,主线程不做其他操作。3.提前分配资源申请内存(减少不必要的系统调用,重复申请内存会造成耗时增加)2.锁要分读写锁(写的时候才上锁,读的时候不用上锁这样能加快线程运行)7.事件模块化(把相应事件封装成一个函数,减少各事件间数据交互)5.时钟信号处理不活跃的连接(减少僵尸连接导致的资源浪费)6.多用零拷贝函数(减少内核和用户缓冲的数据交换时间)1.线程数少于cpu数(减少cpu切换耗时)

2025-03-26 10:24:26 369

原创 c++服务器学习从零开始:第二期使用linux的splice和tee高效传输数据(附带源码)

【代码】c++服务器学习从零开始:第二期使用linux的splice和tee高效传输数据(附带源码)

2025-03-20 16:26:07 258

原创 c++服务器学习从零开始:第二期使用linux的sendfile提高发送文件的效率(附带源码与效果图)

sendfile函数在两个文件描述符间传输数据(内核里操作)避免了内核缓冲区和用户缓冲区的数据拷贝这能大大提高传输效率俗称零拷贝,传输文件建议使用这个,这能大大减少系统开销,先看效果再看源码源码我已经注释好了。

2025-03-19 14:47:45 407

原创 c++服务器学习从零开始:第二期使用linux的epoll替代select实现高性能的 I/O 多路复用机制(附带源码与效果图)

1.epoll能处理的客户端数能接收数万而select只有10242.epoll能处理大量非活跃用户,由于在内核维护事件表,只有活跃才会调用,而select会遍历所有的文件描述符3.事件触发更灵活,内存占用稳定。

2025-03-18 15:20:39 841

原创 c++服务器学习从零开始:第二期使用linux的select搭建简单复用io服务器和客户端通信(附带源码)

所以使用的时候先初始化,每次while循环后保存一个类似的数组(这样select就知道和上次对比有没有变化这样就能知道哪个客户端访问你),fd_set你就把他当一个类型别管他是什么,他就是专门负责存各描述符的状态(你就理解成是客户端的状态)因为linux的服务器源码多且教程多,我发现个有意思的项目实现类似英雄联盟的,我将一步步学习linux服务器,然后会弄一个服务器博客,然后是类似游戏的服务器。select通用,linux和windows都类似,能用单线程的方式实现多线程的效果,仅发生事件时才会触发。

2025-03-17 17:31:22 423

原创 c++服务器学习从零开始:第一期使用windows的建议api搭建简单服务器和客户端通信

为了熟悉现有服务器的架构,网上的服务器内容过于复杂,我将花时间整理一些服务器的知识并用代码合注释的形式展现给大家看,我会把所有代码放到最下面,如果有疑问大家可以私信我接下来的更新,我将我所学习新内容融入到旧的服务器里完善他的性能和拓展他的功能,我也会分享我的学习方法

2025-03-14 14:44:13 735 2

空空如也

空空如也

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

TA关注的人

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