自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c/c++锁简介

c/c++锁简介c/c++锁简介c/c++锁简介互斥锁(Mutex)条件变量(Condition Variable)自旋锁(Spinlock)原子变量(Atomic Variable)信号量(Semaphore)管道(Pipe)读写锁(Read-Write Lock)互斥锁(Mutex)介绍:互斥锁是一种用于多线程编程的同步原语,用于确保在多个线程访问共享资源时的互斥性。当一个线程持有互斥锁时,其他尝试获取该锁的线程将被阻塞,直到锁被释放。应用场景:互斥锁常用于保护临界区,确保在任何时候只有一个

2024-12-12 14:20:00 934

原创 原子操作CAS Q&A

单处理器:底层自旋锁+屏蔽中断多处理器多核:在0x86系统下,通过lock指令锁总线,屏蔽所有内存访问现在的lock指令只需要阻止其他核心访问相关内存空间的访问屏蔽中断,锁定相关内存访问,事务串行化,状态一致性协议最终实现了只有一个核心在操作。多线程环境下,确保对共享变量的操作在执行时不会被干扰,从而避免竞态条件。高级语言一条语句可能在cpu上对应着多条语句。例如:c++中对++(自加)符进行了重载,内部也是调用的原子操作。

2024-12-12 14:19:34 885

原创 内核空间的线程和用户空间的线程有什么异同

内核空间的线程(通常称为内核线程)和用户空间的线程(通常称为用户线程)在操作系统中扮演着不同的角色,它们之间存在明显的异同点。

2024-12-12 14:19:18 288

原创 linux网络收发流程

A:UDP基于数据报,不需要分段,在网络层会进行ip分片,从ip层发往UDP时,IP层会对数据包进行一个重组,将数据放到队列中,队列中每一个节点都是一个完整的UDP报文 ,应用程序会通过recvfrom从队列中取数据,UDP基于数据报,不需要分段,在网络层会进行ip分片,从ip层发往UDP时,IP层会对数据包进行一个重组,将数据放到队列中,队列中每一个节点都是一个完整的UDP报文 ,应用程序会通过recvfrom从队列中取数据,之后交给网络接口层。基于TCP分段,用户消息边界已经消失,造成了粘包的问题。

2024-12-12 14:19:03 524

原创 线程池Q&A

从实现模式看:1.HS/HA(半同步/半异步)模式:(1)及生产者消费者模式;(2)分为同步层,队列层、异步层;(3)同步层的主线程处理工作任务并存入工作队列,工作线程从工作队列取出任务进行处理。(4)如果工作队列为空,则取不到任务的工作线程进入挂起状态。(5)由于线程间有数据通信,不适合大数据量交换的场合。2.L/F(领导与追随者模式):(1)在线程池中的线程可处在三种状态之一:领导者(leader)\追随者(follower)\工作者(processer)

2024-12-12 14:18:43 408

原创 epoll浅析及代码实现

本文从epoll数据结构、线程安全、内核回调、水平/边缘触发四个方面浅析epoll原理。epoll的解释以及用法不再赘述。

2024-10-07 14:15:40 1042

原创 高性能网络-DPDK初探-linux虚拟环境部署

ubuntu22.04.4版本兼容较低版本DPDK(19 )会有问题,我遇到了igb驱动接口不适配问题,gcc版本适配问题等问题,需要修改的代码较多,建议部署环境的时候需要根据实际需求进行选择。我选用的19.08版本可以通过./usertools/dpdk-setup.sh 交互编译。DPDK版本要根据实际需求和linux版本决定,DPDK版本迭代较快,对外接口变化以及内部驱动等接口差异较大。成功编译表示dpdk环境部署完成。编译可能会有一些报错,我遇到的有缺少库的问题,apt安装后重新编译即可。

2024-10-07 14:15:11 483

原创 hook实现

在自定义的 read 函数中实现额外的逻辑,如 poll 检查和上下文切换,并调用原始函数。return res;

2024-10-07 14:14:48 219

原创 hash浅析与应用

散列算法、哈希算法:是一种将任意长度的输入(又叫做预映射,pre-image)通过散列算法变换成固定长度输出(通常是一个较短的、固定长度的值,称为哈希值、散列值或消息摘要)的函数。方法1.先拆分,然后分别hash统计,通过散列表计数,拆分的文件全部算完后统计到一个整的散列表中(空间不足,需要在磁盘操作)然后获得最多的技术。问题1描述:hash 算法得到的结果是随机的,不能保证服务器节点均匀分布在哈希环上;★方法2:拉链法//散列表:使用最广泛的最经典的方法,将所有冲突的值都存储在同一个索引的链表中。

2024-09-12 18:09:11 730

原创 linux内核Q&A

申请锁的线程(或称为节点)会在其对应的CPU变量上自旋,等待其前驱节点释放锁。这种方式避免了多个线程在同一个共享变量上自旋,从而减少了缓存同步操作的次数,提高了系统性能。Linux中的信号量是一种用于进程或线程间同步和互斥的机制。内核使用内存屏蔽(Memory Barrier)的场景主要涉及到多线程或多处理器环境中的内存一致性问题。(2)有可能导致死锁–休眠的情况下多进程临界区都会等待对方释放,(4)中断服务函数(硬件触发)也会无法恢复中断之前状态的问题。

2024-09-08 00:35:52 652

原创 红黑树增删操作

叔叔节点是黑色且node是其父节点的左子节点。通过颜色翻转来解决,将父节点和叔叔节点设为黑色,祖父节点设为红色,然后将祖父节点设为新的node,继续循环。这是一种简化的说法,因为在实际实现中,红黑树通常使用NIL节点(空节点)来表示叶节点,并将这些NIL节点视为黑色。这是红黑树平衡的关键性质,它保证了树的高度大致是log n(n是树中节点的数量),从而保证了红黑树操作的效率。struct rb_node :定义了一个红黑树节点,包括指向父节点和颜色的信息、左子节点指针和右子节点指针。

2024-09-08 00:24:00 290

原创 高性能网络设计基础--网络编程--reactor

定义与原理定义:IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄(或称为IO通道)。一旦某个文件句柄就绪(即有数据可读或可写),就能够通知应用程序进行相应的读写操作;如果没有文件句柄就绪,则会阻塞应用程序,交出CPU。原理:多路复用机制通过操作系统提供的系统调用(如select、poll、epoll等)来监听多个IO事件的就绪状态。当有任何一个IO事件就绪时,操作系统会通知应用程序,告知哪些IO事件已经准备好可以进行读取或写入操作。i/o多路复用是对套接字监听的改进,更专注与事件本身。

2024-09-08 00:21:47 868

原创 reactor百万并发遇到的问题排查

解决方法2:放通服务:firewall-cmd --zone=public --add-service=http(服务名) --permanent。解决方法3:放通端口:firewall-cmd --zone=public --add-port=22/tcp --permanent。假设每个TCP连接的缓冲区大小平均为8KB(8KB是一个常见的估算值,可修改),则百万个TCP连接将占用约8GB的内存空间。报错为访问内存异常,gdb调试发现(截图不清晰),问题代码位置访问数组。

2024-09-05 18:07:57 296

原创 io_uring概要

在 liburing 库和 Linux 的 io_uring 接口中,io_uring_sq(提交队列,Submission Queue)、io_uring_cq(完成队列,Completion Queue)和 io_uring 结构体各自扮演着关键的角色,它们共同构成了 io_uring 异步 I/O 框架的基础。用户空间程序通过设置SQE的不同字段来指定要执行的I/O操作。Linux社区开发的一种新型异步I/O框架,通过提供高度可扩展和高性能的异步I/O接口,有效解决了传统异步I/O框架中的性能瓶颈。

2024-09-05 15:27:53 918

空空如也

空空如也

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

TA关注的人

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