- 博客(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
原创 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关注的人