SlideShare a Scribd company logo
1 of 25
[object Object],[object Object],基于协程的网络开发框架设计
内容概要 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
协程 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
生产者消费者例子 var q := new queue 生产者协程( producer ) loop while q is not full  create some new items  add the items to q  yield to consumer # 协程切换 消费者协程 ( consumer ) loop while q is not empty remove some items from q  use the items  yield to producer # 协程切换 每个协程在用 yield 命令 向另一个协程交出控制 时都尽可能做了更多的 工作。 放弃控制使得另一个 例程从这个例程停止 的地方开始,但因为 现在队列被修改了 所以他可以做更多 事情。 尽管这个例子常用来 介绍多线程,实际没有 必要用多线程实现 这种动态: yield 语句可以通过 由一个协程向另一个 协程直接分支的方式 实现。
协程 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
各种子例程切换开销对比 子例程 地址空间 表项 私有数据 栈空间 执行点 进程 ✔ ✔ ✔ ✔ ✔ 线程 ✔ ✔ ✔ ✔ 协程 ✔ 【?】 ✔ 【?】 ✔ ✔
协程使用的常见场景 ,[object Object],[object Object],[object Object],在一个子例程里实现状态机,这里状态由该过程当前的 出口/入口点确定;这可以产生可读性更高的代码。 并行的角色模型,例如计算机游戏。每个角色有自己的过程(这又在逻辑上分离了代码),但他们自愿地向顺序执行各角色过程的中央调度器交出控制(这是合作式多任务的一种形式) 它有助于输入/输出和对数据结构的通用遍历。
协程 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
内容概要 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
C10K ,[object Object],[object Object],[object Object],[object Object],参考 :  http://www.kegel.com/c10k.html 
C10K  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
C10K ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
内容概要 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
调度 ,[object Object],[object Object],参考 :  http://zh.wikipedia.org/zh-cn/ 哲学家就餐问题
调度 哲学家就餐问题的常见解法: 服务生解法 一个简单的解法是引入一个餐厅服务生,哲学家必须经过他的允许才能拿起餐叉。因为服务生知道哪只餐叉正在使用,所以他能够作出判断避免死锁。
调度 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
调度 ,[object Object],[object Object],[object Object],[object Object]
调度 参考 :http://cvs.schmorp.de/libcoro/coro.h Libcoro 定义的协程操作 API 举例 : typedef void (*coro_func)(void *); typedef struct coro_context coro_context; void coro_create (coro_context *ctx, /* an uninitialised coro_context */ coro_func coro,  /* the coroutine code to be executed */ void *arg,  /* a single pointer passed to the coro */ void *sptr,  /* start of stack area */ long ssize);  /* size of stack area */ void coro_transfer (coro_context *prev, coro_context *next); void coro_destroy (coro_context *ctx);
内容概要 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
网络开发框架的设计 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
网络开发框架的设计 ,[object Object],[object Object],[object Object],[object Object],[object Object]
简单实现 网络组件 文件系统 内存管理 协程管理 调度控制 协程通信 线程管理
简单实现 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FAQ 问答  &  感谢
谢谢大家!

More Related Content

Viewers also liked

Medallero de las olimpiadas de londres 2012
Medallero de las olimpiadas de londres 2012Medallero de las olimpiadas de londres 2012
Medallero de las olimpiadas de londres 2012Belkheir Bennouna
 
Fabiannnnnnnnnnnnnnnnnn
FabiannnnnnnnnnnnnnnnnnFabiannnnnnnnnnnnnnnnnn
FabiannnnnnnnnnnnnnnnnnDanielws21
 
La geología y su relación con otras ciencias
La geología y su relación con otras cienciasLa geología y su relación con otras ciencias
La geología y su relación con otras cienciasMaiye Lopez
 
O Uso da Inteligência Coletiva nas Empresas
O Uso da Inteligência Coletiva nas EmpresasO Uso da Inteligência Coletiva nas Empresas
O Uso da Inteligência Coletiva nas EmpresasElvis Fusco
 
Percona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Cluster And NDB ClusterPercona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Cluster And NDB Clustermysqlops
 
Case Sudy - Marketing research
Case Sudy - Marketing researchCase Sudy - Marketing research
Case Sudy - Marketing researchIntuit Consultancy
 
Percona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT:mysql-security-privileges-and-user-managementPercona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT:mysql-security-privileges-and-user-managementmysqlops
 
Percona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: introduction-to-mysql-replicationPercona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: introduction-to-mysql-replicationmysqlops
 
Percona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimizationPercona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimizationmysqlops
 
The simplethebeautiful
The simplethebeautifulThe simplethebeautiful
The simplethebeautifulmysqlops
 

Viewers also liked (19)

Portafolio conjunto
Portafolio conjuntoPortafolio conjunto
Portafolio conjunto
 
4. prezzi
4. prezzi4. prezzi
4. prezzi
 
Portafolio despiece
Portafolio despiecePortafolio despiece
Portafolio despiece
 
Medallero de las olimpiadas de londres 2012
Medallero de las olimpiadas de londres 2012Medallero de las olimpiadas de londres 2012
Medallero de las olimpiadas de londres 2012
 
PavanKumar
PavanKumarPavanKumar
PavanKumar
 
Fabiannnnnnnnnnnnnnnnnn
FabiannnnnnnnnnnnnnnnnnFabiannnnnnnnnnnnnnnnnn
Fabiannnnnnnnnnnnnnnnnn
 
Jkghljkdbleber
JkghljkdbleberJkghljkdbleber
Jkghljkdbleber
 
Oracle Certificate
Oracle CertificateOracle Certificate
Oracle Certificate
 
Perros Pug
Perros PugPerros Pug
Perros Pug
 
New Doc 2
New Doc 2New Doc 2
New Doc 2
 
La geología y su relación con otras ciencias
La geología y su relación con otras cienciasLa geología y su relación con otras ciencias
La geología y su relación con otras ciencias
 
O Uso da Inteligência Coletiva nas Empresas
O Uso da Inteligência Coletiva nas EmpresasO Uso da Inteligência Coletiva nas Empresas
O Uso da Inteligência Coletiva nas Empresas
 
Mi familia
Mi familiaMi familia
Mi familia
 
Percona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Cluster And NDB ClusterPercona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Cluster And NDB Cluster
 
Case Sudy - Marketing research
Case Sudy - Marketing researchCase Sudy - Marketing research
Case Sudy - Marketing research
 
Percona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT:mysql-security-privileges-and-user-managementPercona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT:mysql-security-privileges-and-user-management
 
Percona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: introduction-to-mysql-replicationPercona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: introduction-to-mysql-replication
 
Percona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimizationPercona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimization
 
The simplethebeautiful
The simplethebeautifulThe simplethebeautiful
The simplethebeautiful
 

Similar to 基于协程的网络开发框架的设计与实现

大话Php之性能
大话Php之性能大话Php之性能
大话Php之性能liqiang xu
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训dcshi
 
Head first in xmemcached yanf4j
Head first in xmemcached yanf4jHead first in xmemcached yanf4j
Head first in xmemcached yanf4jwavefly
 
Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.twWei-Yu Chen
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计mysqlops
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
How to-become-ocm1
How to-become-ocm1How to-become-ocm1
How to-become-ocm1xiaoshi100a
 
面向对象设计七大原则
面向对象设计七大原则面向对象设计七大原则
面向对象设计七大原则zoorz
 
Php Webservers
Php WebserversPhp Webservers
Php Webserverssamon127
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发mysqlops
 
基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现billowqiu
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationnetdbncku
 
腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向George Ang
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
构建私有云计算平台的Eucalyptus架构分析
构建私有云计算平台的Eucalyptus架构分析构建私有云计算平台的Eucalyptus架构分析
构建私有云计算平台的Eucalyptus架构分析liangxiao0315
 

Similar to 基于协程的网络开发框架的设计与实现 (20)

大话Php之性能
大话Php之性能大话Php之性能
大话Php之性能
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
第1章
第1章第1章
第1章
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
Head first in xmemcached yanf4j
Head first in xmemcached yanf4jHead first in xmemcached yanf4j
Head first in xmemcached yanf4j
 
Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.tw
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
How to-become-ocm1
How to-become-ocm1How to-become-ocm1
How to-become-ocm1
 
面向对象设计七大原则
面向对象设计七大原则面向对象设计七大原则
面向对象设计七大原则
 
Php Webservers
Php WebserversPhp Webservers
Php Webservers
 
Php Webservers
Php WebserversPhp Webservers
Php Webservers
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现
 
Chapter2
Chapter2  Chapter2
Chapter2
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向腾讯大讲堂19 系统优化的方向
腾讯大讲堂19 系统优化的方向
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
 
构建私有云计算平台的Eucalyptus架构分析
构建私有云计算平台的Eucalyptus架构分析构建私有云计算平台的Eucalyptus架构分析
构建私有云计算平台的Eucalyptus架构分析
 
Plc3
Plc3Plc3
Plc3
 

More from mysqlops

Oracle数据库分析函数详解
Oracle数据库分析函数详解Oracle数据库分析函数详解
Oracle数据库分析函数详解mysqlops
 
Pldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internalsPldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internalsmysqlops
 
DBA新人的述职报告
DBA新人的述职报告DBA新人的述职报告
DBA新人的述职报告mysqlops
 
分布式爬虫
分布式爬虫分布式爬虫
分布式爬虫mysqlops
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践mysqlops
 
eBay EDW元数据管理及应用
eBay EDW元数据管理及应用eBay EDW元数据管理及应用
eBay EDW元数据管理及应用mysqlops
 
eBay基于Hadoop平台的用户邮件数据分析
eBay基于Hadoop平台的用户邮件数据分析eBay基于Hadoop平台的用户邮件数据分析
eBay基于Hadoop平台的用户邮件数据分析mysqlops
 
对MySQL DBA的一些思考
对MySQL DBA的一些思考对MySQL DBA的一些思考
对MySQL DBA的一些思考mysqlops
 
QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示mysqlops
 
腾讯即时聊天IM1.4亿在线背后的故事
腾讯即时聊天IM1.4亿在线背后的故事腾讯即时聊天IM1.4亿在线背后的故事
腾讯即时聊天IM1.4亿在线背后的故事mysqlops
 
分布式存储与TDDL
分布式存储与TDDL分布式存储与TDDL
分布式存储与TDDLmysqlops
 
MySQL数据库生产环境维护
MySQL数据库生产环境维护MySQL数据库生产环境维护
MySQL数据库生产环境维护mysqlops
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规mysqlops
 
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践mysqlops
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战mysqlops
 
MySQL Explain输出详解
MySQL Explain输出详解MySQL Explain输出详解
MySQL Explain输出详解mysqlops
 
MySQL Explain输出详解
MySQL Explain输出详解MySQL Explain输出详解
MySQL Explain输出详解mysqlops
 

More from mysqlops (20)

Oracle数据库分析函数详解
Oracle数据库分析函数详解Oracle数据库分析函数详解
Oracle数据库分析函数详解
 
Pldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internalsPldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internals
 
DBA新人的述职报告
DBA新人的述职报告DBA新人的述职报告
DBA新人的述职报告
 
分布式爬虫
分布式爬虫分布式爬虫
分布式爬虫
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
eBay EDW元数据管理及应用
eBay EDW元数据管理及应用eBay EDW元数据管理及应用
eBay EDW元数据管理及应用
 
eBay基于Hadoop平台的用户邮件数据分析
eBay基于Hadoop平台的用户邮件数据分析eBay基于Hadoop平台的用户邮件数据分析
eBay基于Hadoop平台的用户邮件数据分析
 
对MySQL DBA的一些思考
对MySQL DBA的一些思考对MySQL DBA的一些思考
对MySQL DBA的一些思考
 
QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示
 
腾讯即时聊天IM1.4亿在线背后的故事
腾讯即时聊天IM1.4亿在线背后的故事腾讯即时聊天IM1.4亿在线背后的故事
腾讯即时聊天IM1.4亿在线背后的故事
 
分布式存储与TDDL
分布式存储与TDDL分布式存储与TDDL
分布式存储与TDDL
 
MySQL数据库生产环境维护
MySQL数据库生产环境维护MySQL数据库生产环境维护
MySQL数据库生产环境维护
 
Memcached
MemcachedMemcached
Memcached
 
DevOPS
DevOPSDevOPS
DevOPS
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规
 
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战
 
MySQL Explain输出详解
MySQL Explain输出详解MySQL Explain输出详解
MySQL Explain输出详解
 
MySQL Explain输出详解
MySQL Explain输出详解MySQL Explain输出详解
MySQL Explain输出详解
 
Cbo100053
Cbo100053Cbo100053
Cbo100053
 

基于协程的网络开发框架的设计与实现

  • 1.
  • 2.
  • 3.
  • 4. 生产者消费者例子 var q := new queue 生产者协程( producer ) loop while q is not full create some new items add the items to q yield to consumer # 协程切换 消费者协程 ( consumer ) loop while q is not empty remove some items from q use the items yield to producer # 协程切换 每个协程在用 yield 命令 向另一个协程交出控制 时都尽可能做了更多的 工作。 放弃控制使得另一个 例程从这个例程停止 的地方开始,但因为 现在队列被修改了 所以他可以做更多 事情。 尽管这个例子常用来 介绍多线程,实际没有 必要用多线程实现 这种动态: yield 语句可以通过 由一个协程向另一个 协程直接分支的方式 实现。
  • 5.
  • 6. 各种子例程切换开销对比 子例程 地址空间 表项 私有数据 栈空间 执行点 进程 ✔ ✔ ✔ ✔ ✔ 线程 ✔ ✔ ✔ ✔ 协程 ✔ 【?】 ✔ 【?】 ✔ ✔
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. 调度 哲学家就餐问题的常见解法: 服务生解法 一个简单的解法是引入一个餐厅服务生,哲学家必须经过他的允许才能拿起餐叉。因为服务生知道哪只餐叉正在使用,所以他能够作出判断避免死锁。
  • 16.
  • 17.
  • 18. 调度 参考 :http://cvs.schmorp.de/libcoro/coro.h Libcoro 定义的协程操作 API 举例 : typedef void (*coro_func)(void *); typedef struct coro_context coro_context; void coro_create (coro_context *ctx, /* an uninitialised coro_context */ coro_func coro, /* the coroutine code to be executed */ void *arg, /* a single pointer passed to the coro */ void *sptr, /* start of stack area */ long ssize); /* size of stack area */ void coro_transfer (coro_context *prev, coro_context *next); void coro_destroy (coro_context *ctx);
  • 19.
  • 20.
  • 21.
  • 22. 简单实现 网络组件 文件系统 内存管理 协程管理 调度控制 协程通信 线程管理
  • 23.
  • 24. FAQ 问答 & 感谢

Editor's Notes

  1. 假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。 哲学家从来不交谈,这就很危险,可能产生 死锁 , 每个哲学家都拿着左手的餐叉,永远都在等右边的餐叉(或者相反)