- 博客(14)
- 收藏
- 关注
原创 SELECT和EPOLL的区别
适合连接数少且活跃度高的场景(主要还是因为实现简单,除此之外没了,在这个场景下,SELECT和EPOLL差别不大)“零拷贝”:数据从磁盘直接到页缓存,用户进程直接访问页缓存,避免了从内核缓冲区到用户缓冲区的拷贝。MMAP适合处理超大文件 - 1TB的文件,如果只访问其中1MB,就只会加载1MB到内存。传统IO方式:磁盘 → 内核缓冲区 → 用户缓冲区 (两次拷贝)mmap方式:磁盘 → 内存映射 → 直接访问 (零拷贝)使用位图(fd_set)表示文件描述符集合。支持水平触发(LT)和边缘触发(ET)
2025-06-11 12:28:40
551
原创 Nginx内存池讲解
注意:第一个创建的ngx_pool_t里面包含的ngx_pool_data是连续的内存区域(用ngx_memalign来分配);后续的都不是连续的了;
2025-06-10 17:19:25
100
原创 docker基本原理
创建自定义bridge网络# 运行容器并指定IP内置DNS解析(容器名称解析)更好的隔离性可以动态连接/断开网络支持多个网络同时连接。
2025-06-07 11:13:20
1856
原创 进程、线程、协程
进程间相互隔离,稳定性高充分利用多核CPU一个进程崩溃不影响其他进程资源占用大创建/销毁开销大进程间通信复杂• Chrome浏览器(每个标签页一个进程)• Nginx的Master-Worker模式• 需要高稳定性的服务器应用• CPU密集型任务的并行处理。
2025-05-28 16:16:23
299
原创 缓存一致性问题解决方案
比如有这样一个场景:一个电商平台正在举办限量商品秒杀活动。系统部署在多台服务器上,用户请求可能被分发到任意一台服务器处理。每件商品库存有限,需要确保不会出现超卖情况。:当大量用户同时抢购时,如果不加锁控制,多个服务器上的进程可能同时读取到相同的库存数,导致库存被重复扣减,最终卖出超过实际库存的商品。
2025-05-25 11:15:47
198
原创 服务器百万并发实现
根据下图所示,我们定义一个结构体,来保存与每个连接相关的信息,包括 socket 描述符、接收和发送的缓冲区、以及对应的回调函数。对于一个服务端的一个连接来说,listenfd要执行的是accept_cb,对于clientfd来说要执行的是recv_cb和send_cb,由于服务器接收数据,要么是接收连接请求要么是接受内容,所以定义一个联合union来节省空间。
2024-10-14 18:20:51
1570
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人