自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++11新特性3(匿名函数lambda表达式)

如果捕获列表为[&],则表示所有的外部变量都按引用传递给lambda使用;如果捕获列表为[=],则表示所有的外部变量都按值传递给lambda使用;匿名函数构建的时候对于按值传递的捕获列表,会立即将当前的值拷贝一份作为常数,然后将该常数作为参数传递,只有加上mutable关键字才能修改其值;形式说明[]空捕获列表,Lambda不能使用所在函数中的变量。[names]names是一个逗号分隔的名字列表,这些名字都是Lambda所在的函数局部变量。

2023-06-09 13:23:19 1410

原创 C++11新特性2(右值引用和移动语义)

C++11在性能上做了很大的改进,最大程度减少了内存移动和复制,通过右值引用、forward、emplace和一些无序容器我们可以大幅度改进程序性能。右值引用仅仅是通过改变资源的所有者(剪切方式而不是拷贝方式)来避免内存的拷贝,能大幅提高性能。forward能根据参数的实际类型转发给正确的函数(参数用&&的方式)。emplace系列函数通过直接构造对象的方式避免了内存的拷贝和移动。

2023-06-08 20:41:06 417

原创 C++11新特性1(智能指针)

智能指针主要解决以下问题:内存泄漏:内存手动释放,使用智能指针可以自动释放(malloc -> free; new -> delete)共享所有指针的传播和释放,比如多线程使用同一个对象时析构问题特点:unique_ptr独立对象的所有权,由于没有引用计数,因此性能较好。shared_ptr共享对象所有权,但性能略差。weak_ptr配合shared_ptr,解决循环引用的问题。

2023-06-08 20:10:02 417

原创 基于dpdk的用户态协议栈的实现1(配置多队列网卡,dpdk配置,设置arp)

找到虚拟机对应的文件(E:\programmingAPP\VM\Linux\zerovoice\zerovoice.vmx)用VSCode打开”zerovoice.vmx“复制对应网卡的HWaddr的值,ctl+f查找该值就可找到该网卡,根据该网卡找到对应的配置并修改3.重启虚拟机,输入命令 cat /proc/interrupts | grep eth0 会发现eth0已经变成一个多队列网卡了。

2023-05-23 20:09:21 385 1

原创 Linux进程(有代码,有图,有知识整理)

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。

2023-05-20 18:43:57 326 1

原创 Linux信号(有代码,有示例图,有知识点整理,有信号的妙用)

服务程序运行在后台,如果想让中止它,强行杀掉不是个好办法,因为程序被杀的时候,程序突然死亡,没有释放资源,会影响系统的稳定,用”Ctrl+c“中止与杀程序是相同的效果。如果能向后台程序发送一个信号,后台程序收到这个信号后,调用一个函数,在函数中编写释放资源的代码,程序就可以有计划的退出,安全而体面。一、如何让服务程序运行在后台在指令后加“&”符号或者用fork()可以让程序在后台运行,我们可以发送信号可以让处于后台运行的程序产生相应的关联(执行函数、退出程序、给其他进程发送信号...)。

2023-05-20 17:09:00 504 1

原创 协程3(协程如何与posix api兼容,协程多核模式怎么做)

多核模式配合多线程/多进程,要注意加锁的问题,建议每个线程/进程一个调度器,由调度器管理io避免加锁。与cpu黏合适合计算密集型的业务,因为没有cpu切换,就在一个cpu上计算,对io密集型意义不大。运行结果1:#if 1 线程黏合cpu。运行结果2:#if 0 进程黏合cpu。运行结果1:#if 0。运行结果2:#if 1。

2023-05-06 19:12:51 107

原创 协程2(协程的struct和scheduler如何定义,调度策略如何选择)

CO_NEW, //新建CO_READY, //就绪CO_WAIT, //等待CO_SLEEP, //睡眠CO_EXIT, //退出int coid;// 协程id// 上下文// 入口函数void *arg;// 入口函数的参数// 独立栈(隔离性好,但内存共享率不高)/共享栈// 栈的大小// 协程的状态// 就绪节点// 睡眠节点// 等待节点// 退出节点// 当前运行的协程// 就绪的头节点// 睡眠的头节点// 等待的头节点// 退出的头节点。

2023-05-06 19:04:15 101

原创 协程1(为什么会有协程,协程的原语操作,协程的上下文切换)

为什么会要有协程?协程的原语(基本)操作有哪些?协程的切换怎么实现?协程的struct如何定义?协程的scheduler如何定义?调度策略如何实现?如何与posix api兼容?协程多核模式怎么做?协程的性能如何测试?

2023-05-06 18:55:14 270 1

原创 Linux的http服务器实现(含C代码)

【代码】Linux的http服务器实现(含C代码)

2023-04-23 17:27:48 492 1

原创 Linux的reactor服务器模型(含C语言代码)

reactor的工作机理1. 创建sockfd(lientfd),绑定端口号,设置sockfd(lientfd)的回调函数为acceptor,加入epoll,监听端口是否有client(客户)连接。(如果有则触发回调函数acceptor,分配clientfd,并设置clientfd的回调函数为recv)2. 在main中循环调用epoll_wait(),根据fd的不同事件去调用对应的回调函数(acceptor(),recv(),send())

2023-04-21 18:56:07 204 1

原创 Linux的tcp服务器连接的几种方式(线程、select、poll、epoll)

一连接一线程:在实际场景里,一万个连接可能就几个连接在收发数据,而剩下的的线程就处于等待状态,系统开销大且浪费。select:将需要处理的io集合拷贝进系统内核里遍历,然后将需要处理的io分成不同的集合返回。poll:poll和select的处理方式类似,但是相比select的接口更少。epoll:每当有一个io连接时就将其打包进系统内核,而系统内核只需要将需要事件处理的io返回即可,无需每次都将所有io集合拷贝进内核。(注意当io连接断开时,一定要将该io从内核中清除避免产生未知错误)

2023-04-15 14:35:08 817 1

空空如也

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

TA关注的人

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