SlideShare a Scribd company logo
1 of 23
异步io调度框架的实现
峰云就她了
http://xiaorui.cc
网卡收到数据之后
包少,硬中断
包多,屏蔽硬中断,DMA+软中断
socket详细流程
tcp三次握手
setblocking
backlog多大合适?
syn, accept队列
accept(), Why new socket
协议栈
粘包
buffer缓冲区大小
IO阻塞的本质
读缓冲,写缓冲区
send,recv原理
满加锁,空解锁
tcp ack 滑动窗口角色
那么8k的写缓冲区,我有80k要写,流程?
疑问
怎么确定recv的结构是完整的?
短连接
协议约定
粘包是个伪命题 !
长连接、短连接的区别
socket维护长短连接的手段
屏蔽close()
IO复用模型
用thread、process活跃上下文
keepalive心跳包谁来维护? 自定义意义
疑问
socket so_keepalive 参数的作用
检测对端的存活
keepalive_probes
keepalive_time
keepalive_intvl
如果没配置so_keepalive, client挂了,服务端在recv阶段呆很久...
如果配置了so_keepalive, 通过协议栈来探测存活
高并发模型
fork模型
进程池模型 or 线程池模型
io复用模型
疑问
惊群?
饥饿?
so_reuseaddr
so_reuseport
上下文
什么是上下文
什么是上下文切换
为什么要上下文切换
什么时候会上下文切换
执行单元
进程
线程
协程
堆、栈
抢占、协作
io
同步阻塞
同步非阻塞
异步阻塞
异步非阻塞
fd
一个线程如何多个fd ?
忙轮询? 要不线程池,堵塞等唤醒
io多路复用
select
poll
epoll
select
用法?
epoll
epoll_create
epoll_ctl
epoll_wait
水平触发 vs 边缘触发
tornado、nginx的选择
跨平台
libevent
libev
libuv
非堵塞客户端
connect_ex()
sock.setblocking
eagain == EWOULDBLOCK
O_NONBLOCK
eintr
连接问题
协程可以共用一个连接么 ?
连接池 vs call create ?
调度器组成部分
核心 event loop
类生成器
map{fd: object}
信号处理
IO状态
文件属性变化
定时器
periodic
timeout
prefork + epoll
Master Worker工作模型
max_requests
add、reduce
worker reload
log reload
socketpair
epoll wait惊群某个进程 —
配置文件启动了accept_mutex:
是否超负载
开始尝试拿锁,非堵塞
如果拿到:
flags |= NGX_POST_EVENTS; 优先处理accept事件
释放锁
处理正常socket事件
没有拿到:
返回下次的epoll_wait的超时时间,而且该tiemout缩短,意味着加大机会拿到锁
别的进程在某个进程释放mutex和epoll_wait超时后,就可以有机会拿到锁了。
疑问?
c10k
服务端没有65535port限制
–xiaorui.cc
“END”

More Related Content

What's hot

缓存基础
缓存基础缓存基础
缓存基础dynamiclu
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 
Redis配置文件说明
Redis配置文件说明Redis配置文件说明
Redis配置文件说明jimmyyem
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveOpenCity Community
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查bluedavy lin
 

What's hot (8)

缓存基础
缓存基础缓存基础
缓存基础
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
Redis配置文件说明
Redis配置文件说明Redis配置文件说明
Redis配置文件说明
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 

Viewers also liked

异步io框架的实现
异步io框架的实现异步io框架的实现
异步io框架的实现rfyiamcool
 
美妙的多进程管理
美妙的多进程管理美妙的多进程管理
美妙的多进程管理rfyiamcool
 
大话redis设计实现
大话redis设计实现大话redis设计实现
大话redis设计实现rfyiamcool
 
分析mysql acid 设计实现
分析mysql acid 设计实现分析mysql acid 设计实现
分析mysql acid 设计实现rfyiamcool
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理rfyiamcool
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)frogd
 
cdn的那些事儿
cdn的那些事儿cdn的那些事儿
cdn的那些事儿rfyiamcool
 

Viewers also liked (8)

异步io框架的实现
异步io框架的实现异步io框架的实现
异步io框架的实现
 
python gil
python gilpython gil
python gil
 
美妙的多进程管理
美妙的多进程管理美妙的多进程管理
美妙的多进程管理
 
大话redis设计实现
大话redis设计实现大话redis设计实现
大话redis设计实现
 
分析mysql acid 设计实现
分析mysql acid 设计实现分析mysql acid 设计实现
分析mysql acid 设计实现
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)
 
cdn的那些事儿
cdn的那些事儿cdn的那些事儿
cdn的那些事儿
 

Similar to async io frame

C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践Feng Yu
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析George Ang
 
Key value store
Key value storeKey value store
Key value storexuanhan863
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijingdrewz lin
 
Io t security-ameba-ppt
Io t security-ameba-pptIo t security-ameba-ppt
Io t security-ameba-pptJou Neo
 
Introduction of netty
Introduction of nettyIntroduction of netty
Introduction of nettyBing Luo
 
腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向topgeek
 
腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向areyouok
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会freezr
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 
腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向George Ang
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptxjames tong
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
网络基础知识(经典)
网络基础知识(经典)网络基础知识(经典)
网络基础知识(经典)littlesujin
 

Similar to async io frame (20)

C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
 
Key value store
Key value storeKey value store
Key value store
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
 
09 存储系统01
09 存储系统0109 存储系统01
09 存储系统01
 
Io t security-ameba-ppt
Io t security-ameba-pptIo t security-ameba-ppt
Io t security-ameba-ppt
 
Introduction of netty
Introduction of nettyIntroduction of netty
Introduction of netty
 
腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向
 
腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
10 存储系统02
10 存储系统0210 存储系统02
10 存储系统02
 
数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会数据库与ssd的实践与探索-2011数据库技术大会
数据库与ssd的实践与探索-2011数据库技术大会
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
网络基础知识(经典)
网络基础知识(经典)网络基础知识(经典)
网络基础知识(经典)
 

More from rfyiamcool

Redis cluster那些事儿
Redis cluster那些事儿Redis cluster那些事儿
Redis cluster那些事儿rfyiamcool
 
Golang advance
Golang advanceGolang advance
Golang advancerfyiamcool
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast sharerfyiamcool
 
python高级内存管理
python高级内存管理python高级内存管理
python高级内存管理rfyiamcool
 

More from rfyiamcool (7)

Redis cluster那些事儿
Redis cluster那些事儿Redis cluster那些事儿
Redis cluster那些事儿
 
Golang advance
Golang advanceGolang advance
Golang advance
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
python高级内存管理
python高级内存管理python高级内存管理
python高级内存管理
 
Micro service
Micro serviceMicro service
Micro service
 
Raft
Raft Raft
Raft
 

async io frame