网络编程
文章平均质量分 95
HilariousDog
email: fyli88@qq.com
记录所学,帮助成长。Good luck!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux网络编程11——线程池
这是一个非常基础的线程池,没有尝试使用无锁编程。线程池关闭可能被无限延迟(关闭一般是在程序结束运行时,所以一般问题不大)。另外对于任务类型,设计的也比较简单,没有考虑future和promise等,这个可以留给用户提供的task去自定义。原创 2025-01-20 00:29:06 · 1128 阅读 · 0 评论 -
基于异步IO的io_uring
io_uring使用了一种异步IO机制,它通过一对环形缓冲区(ring buffer)实现用户态于内核态之间的高效通信,用户只需将IO请求放入提交队列,当内核完成IO请求时,会将结果放入完成队列,然后用户从完成队列中提取结果并进行后序处理。io_uring中的两个队列是映射到用户态的共享内存区域,用户态和内核态可以直接通过这个区域交换数据,减少了系统调用上下文切换。用户也可以一次性提交多个IO请求,减少了系统调用次数。原创 2025-01-12 20:58:22 · 958 阅读 · 0 评论 -
spdlog高性能日志系统
`spdlog` 是一个快速、简单、功能丰富的 C++ 日志库,专为现代 C++ 开发设计。它支持多种日志后端(如控制台、文件、syslog 等),并提供灵活的格式化和线程安全的日志输出。原创 2024-12-10 23:43:18 · 1451 阅读 · 0 评论 -
Redis4——持久化与集群
本文讲述了1.redis在内存占用达到限制后的key值淘汰策略;2.redis主从复制原理;3.redis的哨兵模式;4.redis集群模式。原创 2024-12-04 18:18:18 · 1356 阅读 · 0 评论 -
Redis3——线程模型与数据结构
本文讲述了redis的单线程模型和IO多线程工作原理,以及几个主要数据结构的实现。原创 2024-11-30 21:16:36 · 1336 阅读 · 0 评论 -
Redis2——协议与异步方式
本文讲述了Redis pipeline技术,它被用于一次发送和执行多个命令;事务的ACID特性,Redis只能部分满足;最后介绍了实现了Redis客户端的同步连接和异步连接方式。原创 2024-11-28 21:16:12 · 937 阅读 · 0 评论 -
Redis1——基本命令及原理
本文介绍了redis的特点、五种数据类型、基本命令等。原创 2024-11-26 20:38:14 · 1339 阅读 · 0 评论 -
MySQL4——缓存策略
本文讲述了Mysql缓存方案的原理、其它改进方案、缓存读写策略、缓存一致性的分析与实现,数据增量同步的实现方式:伪装从库、udf+触发器。最后还分析了该缓存方案可能出现的故障及解决方案,以及其弊端。原创 2024-11-25 18:46:03 · 946 阅读 · 0 评论 -
MySQL3——事务原理
本文讲述了mysql中事务的概念、原理,重点讲述了四种隔离级别、mvcc、锁以及死锁问题。原创 2024-11-24 19:52:38 · 814 阅读 · 0 评论 -
MySQL2——索引原理和SQL优化
本文讲述了mysql的InnoDB存储引擎的索引存储原理、索引匹配原则以及SQL的优化等。原创 2024-11-21 13:12:28 · 884 阅读 · 0 评论 -
MySQL1——基本原理和基础操作
本文讲述了mysql数据库的基本概念、原理和常用CRUD语句。原创 2024-11-20 15:15:59 · 876 阅读 · 0 评论 -
linux网络编程10——内存池
本文讲述了内存池的概念、原理、好处,并且实现了两种类型的内存池:固定大小的内存池和分级内存池。最后分别对这两种内存进行了性能测试,测试结果表明,在简单的频繁分配和释放动态内存块的场景下,这两种内存池至少能够提高一倍的性能。原创 2024-11-18 16:50:12 · 1350 阅读 · 0 评论 -
linux网络编程9——无锁队列
本文讲述了无锁队列的原理、分类、底层数据结构、应用场景,以及两种实现方式。原创 2024-11-14 21:23:00 · 1239 阅读 · 0 评论 -
linux网络编程8——原子操作CAS与锁实现
本文讲述了原子操作的原理、缓存一致性协议MESI、和原子操作的6种内存序,最后利用原子变量和内存序实现了一个自旋锁。原创 2024-11-12 17:19:25 · 1031 阅读 · 0 评论 -
linux网络编程7——协程设计原理与汇编实现
本文介绍了协程的概念、特征、优势、以及其实现原理。原创 2024-10-29 23:04:09 · 967 阅读 · 0 评论 -
linux网络编程6——基于UDP的可靠传输协议KCP/QUIC
本文详细介绍了KCP协议基本原理,并简要介绍了KCP的使用方式以及QUIC协议。原创 2024-10-26 18:08:10 · 2114 阅读 · 0 评论 -
linux网络编程5——Posix API和网络协议栈,使用TCP实现P2P通信
本文介绍了linux Posix API涉及网络编程的常用函数,并解释其原理和涉及的网络协议栈。最后,利用TCP三次握手中同时打开建立连接的情况实现了P2P通信。原创 2024-10-25 13:26:57 · 1649 阅读 · 0 评论 -
linux网络编程4——WebSocket协议及服务器的简易实现
本文详细介绍了WebSocket协议的特点、与HTTP的区别以及应用场景;然后分析了WebSocket协议的主要内容;最后借助前面的底层reactor的代码实现了一个WebSocket协议的Web服务器。原创 2024-10-23 13:52:10 · 1851 阅读 · 0 评论 -
linux网络编程3——http服务器的实现和性能测试
是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。可以在连接中保存一个status字段,表示当前连接的状态,当status为0,表示还没有发送任何信息,为1表示已经发送了头部,正在发送文件块,为2表示已经全部发送完毕。缺点是,由于不经过用户空间,无法对文件分块发送,在阻塞IO模式下发送大文件可能长时间陷入阻塞。ET 只在状态变化的那一刻通知,不会持续通知。原创 2024-10-22 22:12:43 · 1001 阅读 · 0 评论 -
linux网络编程2——reator事件处理模型及服务器百万并发的实现
在阻塞IO模式下,发送缓冲区爆满会导致send函数陷入阻塞,直接导致连接增长停止。在非阻塞IO模式下send函数会直接返回-1,这可能导致短时间内频繁系统调用上下文切换,从而导致cpu占用提升,连接增长变缓慢。例如当.bss段大于4GB时,采用相对引用的话,其与代码段的偏移可能超过32为地址所能表示的范围,因此需要改用更大的代码模型。由于客户端也需要为每一个连接在本地分配一个端口,如果用于测试的客户端针对同一个远程ip和端口建立的连接太多,会导致客户端端口不足。可以尝试扩大TCP缓冲区,在。原创 2024-10-22 17:07:29 · 445 阅读 · 0 评论 -
linux网络编程1——IO管理(select/poll/epoll)
以上讲的IO多路复用关注的都是IO事件的管理,epoll对于大量并发连接的场景性能很好,poll适用于IO连接很少的时候,select的可移植性强。IO事件管理任何网络应用程序都需要的,与业务层无关。原创 2024-10-22 17:06:05 · 1050 阅读 · 0 评论
分享