最近在开发一个叫做medis的项目,虽然进度很缓慢,但是可以不断的去思考如何可以做的更好。 对于网路IO中的事件处理模式最常见的方式是reactor模式,这种模式一般是每一个线程一个poller或者多个线程共享一个pol...
分类:
其他好文 时间:
2014-12-05 17:40:10
阅读次数:
159
综述这篇文章探讨并比较两种用于TCP服务器的高性能设计模式。 除了介绍现有的解决方案,还提出了一种更具伸缩性,只需要维护一份代码并且跨平台的解决方案(含代码示例),以及其在不同平台上的微调。 此文还比较了java、c#、c++对各自现有以及提到的解决方案的实现性能。系统I/O 可分为阻塞型, 非阻塞...
分类:
其他好文 时间:
2014-11-13 22:09:08
阅读次数:
294
要对kamailio/opensips进行单步调试,就需要先了解其代码的结构及运行方式,kamailio/opensips使用Reactor和Proactor结合的IO网络模型,使用主进程负责监听网络,当有连接产生或首包到达时,就通过pipe将文件描述符发送给worker进程,worker进程就会负责此连接的数据取读、业务处理、数据发送等事情,然后再次等待此socket...
分类:
数据库 时间:
2014-09-24 23:56:07
阅读次数:
570
下面的程序使用Proactor模式用UDP通信,由于UDP是无连接的,所以这里没有Connector和Acceptor
发送端发送一个复合消息,并打印发送的内容
接收端接收一个复合消息并打印接收到的内容
本例是对ACE自带的example的稍微修改了一下(打印发送和接收的内容,这样更加直观)
发送端:client_main.cpp
#include
#include
#in...
分类:
其他好文 时间:
2014-09-24 13:36:56
阅读次数:
251
普通的UDP组件发送和接收
接收端
//server.cpp
#include
#include
#include
#include
#include
using namespace std;
#include "boost/lexical_cast.hpp"
using namespace boost;
void receive()
{
ACE_INET_Addr p...
分类:
其他好文 时间:
2014-09-17 16:50:52
阅读次数:
192
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。 在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步,同步和异步是针对应用程序和内核的交互而言的,同步指的...
分类:
其他好文 时间:
2014-08-27 18:24:08
阅读次数:
187
相对于asio事件等待池aiop的reactor模式,基于proactor模式的事件回调池aicp封转的更加的上层。 1. 在类unix系统上 底层是基于aiop的实现,在一个线程里面进行事件等待,然后分发所有事件,在worker中处理完后调用...
分类:
其他好文 时间:
2014-08-20 12:41:52
阅读次数:
335
使用asio之前要先对它的设计思想有所了解,了解设计思想将有助于我们理解和应用asio。asio是基于proactor模式的,asio的proactor模式隐藏于大量的细节当中,要找到它的踪迹,往往有种只见树木不见森林之感,笔者将剖析asio中的proactor模式,一步一步揭开它的面纱,最终拨.....
分类:
其他好文 时间:
2014-07-16 20:30:32
阅读次数:
211
在上一篇博文中我们提到异步请求是从上层开始,一层一层转发到最下面的服务层的对象win_iocp_socket_service,由它将请求转发到操作系统(调用windows api),操作系统处理完异步请求之后又是如何返回给应用程序的呢,这里是通过iocp(完成端口)来实现的。让我们先来简要的看看.....
分类:
其他好文 时间:
2014-07-13 17:37:18
阅读次数:
235
网上很多IO资料,对新手来说,越看越晕。根据自己的理解,总结对比了一下OIO、NIO、AIO。
OIO:线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成。如下图:
NIO(reactor模型):线程发起IO请求,立即返回;内核在做好IO操作的准备之后,通过调用注册的回调函数通知线程做IO操作,线程开始阻塞,直到操作完成。如下图:
AIO(...
分类:
其他好文 时间:
2014-05-23 01:00:05
阅读次数:
470