1.支付宝模拟线上优化实战 2.手写JUC工具与提升tomcat吞吐量 3.网络通信BIO设计与缺陷 -- accept() 和 read()阻塞 4.单线程解决高并发NIO精髓解读 5.OS内核下Epoll与Selete源码解读 第一部分: 性能优化 问题:如何在高并发场景下实现支付宝用户登录页面 ...
分类:
系统相关 时间:
2020-04-11 10:02:44
阅读次数:
82
1. select (能监控数量有限,不能告诉用户程序具体哪个连接有数据) 1. select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点 2. select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024 3. select监控socket ...
分类:
其他好文 时间:
2020-04-09 09:12:10
阅读次数:
70
fd_set 使用数组实现,在内核中默认实现是 16个大小,但是他是long类型,每个元素64位,所以 16*64 =1024 个,select的瓶颈也就是1024个连接 所以遍历出来的对应数组就可以拿到文件描述符 epoll create 用来生成一个树的根节点、 epoll ctl ...
分类:
其他好文 时间:
2020-04-05 15:08:55
阅读次数:
66
关于CLOSE_WAIT和TIME_WAIT状态,服务器端都有可能出现,TIME_WAIT出现应该是短连接较多,需要通过修改内核参数解决,CLOSE_WAIT状态则是服务器程序可能有问题,服务器需要主动close,以及epoll多路复用模型中使用linger调整关闭等待时间 分析解决这类问题,关键在 ...
分类:
系统相关 时间:
2020-04-01 13:13:17
阅读次数:
109
import socket import select ''' kernel:Linux的操作系统 epoll:创造一个特殊的内存空间,tcp服务器和操作系统共用,将套接字列表放在该内存,不再使用轮询的方式遍历列表,而采用事件通知 轮询:开发上讲遍历称为轮询 事件通知: ''' def tcp_se ...
分类:
Web程序 时间:
2020-03-31 01:26:14
阅读次数:
95
运行环境: Win 7 JDK 8 + Redis 3.0.504 Spring Boot 2.2.2.RELEASE 一、为什么要使用Redis 速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件; 丰富的数据类型,Redis有8 ...
分类:
编程语言 时间:
2020-03-28 17:39:38
阅读次数:
79
【场景】客户端大量连接,如果采用多线程方式的话,线程上下文切换导致性能不佳。因此采用io多路复用。 一、上下文切换 对于单核CPU来说(对于多核CPU,此处就理解为一个核),CPU在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫做线程上下文切换(对于进程也是类似)。 ...
分类:
其他好文 时间:
2020-03-28 16:16:39
阅读次数:
71
本节记录Windows下与epoll类似的机制IOCP(input outpout completion port)。对于单台电脑的多TCP连接请求,IOCP和epoll是比较好的选择。 1. 重叠IO 1.1 关键函数 由于IOCP的使用会用到较多重叠IO相关的函数,先记录一下重叠IO。所谓重叠I ...
分类:
其他好文 时间:
2020-03-26 19:51:02
阅读次数:
73
https://blog.csdn.net/jethai/article/details/52345302 应用层的负载均衡 master/worker结构:一个master进程,生成一个或多个worker子进程 nginx请求的连接方式epoll 是Linux下多路复用IO接口select/pol ...
分类:
Web程序 时间:
2020-03-16 21:56:10
阅读次数:
74
一、selectors模块简介 它的功能与linux的epoll,还是select模块,poll等类似;实现高效的I/O multiplexing, 常用于非阻塞的socket的编程中; 相当于封装好的select和epoll,适用于不同的平台,如果支持epoll的平台自动选择epoll,否则会找s ...
分类:
编程语言 时间:
2020-03-15 11:52:50
阅读次数:
70