Chinaunix首页 | 论坛 | 博客
  • 博客访问: 179577
  • 博文数量: 28
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 954
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-21 10:28
个人简介

站在巨人的肩膀是骗人的

文章分类

全部博文(28)

文章存档

2013年(28)

分类: 架构设计与优化

2013-01-18 10:58:41

email:tinysrc@163.com

qq:744271556


什么是asio?

asio旨在提供一个平台独立、高吞吐量、低延迟、易扩展的io服务。


asio是如何实现平台独立

这个平台独立,是操作系统平台的独立,而不是硬件平台。对于io服务,只需要关注、依赖于完备成熟的操作系统,比如windows、linux、solaris等。

因为我们需要考虑某个平台的tcp/ip stack、thread、atomic operation、io model(select?iocp?epoll?kqueue?)等,而对于成熟平台来说,它的特征多,就容易达成高吞吐量、低延迟的目标。

说到平台独立,大家最先想到用c来实现?可以依赖于apache的apr啊?asio为了高效以及代码的优雅,选择了使用了c++模板。有人说服务端只在linux/bsd上,就只写这个平台的实现,不是更高效?

说的没错,但是任何优雅的东西,都是效率与设计的权衡,如果纯粹为了效率,为何要去做操作系统,直接写机器码是了。再说,从宏观的角度,不是任何东西都值得去优化。如果你真的读懂了

asio,你就会懂asio的KISS原则。


asio是如何抽象的?

asio的文件层次结构就是它抽象最好的表述。

io_service作为asio的第一层的核心抽象,它的实现是放在了当前目录下面的impl目录里,而针对io_service的具体细节实现都放在当前目录下面的detail目录里(参阅上图)。

针对posix操作系统的一些特征都放在asio目录下面的posix目录里,针对windows操作的一些特征都放在asio目录下的windows目录里。

asio是提供对file_descriptor的io服务而不局限在网络socket,所以ip的一些特征都放在ip目录里,因为ssl作为一个安全套接字层(介于传输层和应用层间),也特意放到ssl目录里。



asio如何实现高吞吐量、低延迟?

这个内容比较多,asio是如何权衡高效与优雅两面而实现高吞吐量和低延迟的,将在后续分析博文中分享。


asio如何实现易扩展性?

一个应用程序的线程模型是由具体业务决定,所以asio不会强制使用者必须遵循于某一种线程模型,所以你可以fork若干根线程作为io_service的工作线程,当然你也可以让主程序作为io_service的工作线程。

而且你一个进程里可以有多个io_service,io_service也可以被层次地使用。这大大地给库使用者提供了很大的便利。


阅读(2162) | 评论(1) | 转发(0) |
1

上一篇:没有了

下一篇:[排序]冒泡排序

给主人留下些什么吧!~~

moon_dw2013-01-19 11:46:54

抓紧出下集,这集干货不多