您正在查看 "异步i/o高性能并发并行服务器研发" 分类下的文章 2011年08月25日 星期四 下午 5:37 1. 概述
Thrift是Facebook为了跨编程语言工作而开发的软件库和代码生成工具的一个项目。其高效性十分吸引软件开发工作者。
2. 下载Thrift
首先从thrift的官方网站(http://thrift.apache.org/download)下载最新的安装包thrift-0.6.1.tar.gz
3. 安装Thrift
首先解压缩:
|
2011年08月23日 星期二 下午 10:14 thrift属于facebook.com技术核心框架之一,使用不同开发语言开发的系统可以通过该框架实现彼此间的通讯,开发者只需编辑一份thrift脚本,即可自动获得其它开发语言的代码(比如 c++ java python ruby c# haskell ocmal erlang cocoa php squeak). thrift侧重点是构建夸语言的可伸缩的服务,特点就是支持的语言多,同时提供了完整的rpc service framework,可以很方便的直接构建服务,不需要做太多其他的工作。服务端可以根据需要编译成simple | thread-pool | threaded | nonblocking等方式; thrift支持多种协议格,Thrift |
2011年03月18日 星期五 下午 6:08
在需要并行化处理数据的时候,采用消息队列通讯的方式来协作,比采用共享状态的方式要好的多。Erlang ,Go 都使用这一手段来让并行任务之间协同工作。
最近读完了 ZeroMQ 的 Guide。写的很不错。前几年一直有做类似的工作,但是自己总结的不好。而 ZeroMQ 把消息通讯方面的模式总结的很不错。
ZeroMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层 |
2011年03月13日 星期日 上午 9:36
NAME epoll_wait, epoll_pwait - wait for an I/O event on an epoll file descriptor
SYNOPSIS #include <sys/epoll.h>
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); |
2011年01月26日 星期三 下午 11:06 2011年01月26日 星期三 下午 6:15 2011年01月21日 星期五 上午 9:13 在陆续写了《epoll模型编程的几个问题》《epoll模型编程的几个问题2》后,发现epoll有些不理解的地方。 今天,深入了解了epoll的事件机制,发现epoll有两种事事件触发机制。一是边沿触发(edge triggered),一是电平触发(levle triggered)。 写文一篇《epoll编程终结者》,以总结并终结之
epoll的核心就是其事件机制,所以只有很好的了解其事件机制,才能更好的使用epoll.
epoll的事件分发机制分为两种一是边沿触发(edge triggered),一是电平触发(levl |
2011年01月21日 星期五 上午 9:11 select/poll模型一直是Linux长期以来使用较多的服务器模型,自从2.6内核引入epoll模型以后,我们又有了一种更加有效的服务器模型,一直以来都耳闻epoll模型对比select模型的优点,赞誉之声一片,他如何高效,高效到什么程度,还是一知半解,在之前的一篇博客,我简要分析了select模型代码,的确正如前人所言,使用轮询方式处理连接,这里我讲分析epoll模型的框架,体会其高效。 这里先简略说明一下epoll的使用流程,其使用或许比select模型更为简洁: epoll_create(size); |
2011年01月21日 星期五 上午 9:10 epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的select/poll操作,只要还有没有处理的事件就会一直通知.
以代码来说明问题: 首先给出server的代码,需要说明的是每次accept的连接,加入可读集的时候采用的都是ET模式,而且接收缓冲区是5字节的,也就是每次只接收5字节的数据: #include < |
2011年01月21日 星期五 上午 9:06 之前一直在讲如何epoll如何好用,但是并没有实例来演示epoll的使用,下面我们就看一个服务器端使用epoll监听大量并发链接的例子。 首先看一下epoll的几个函数的介绍。 1、epoll_create函数
/** * @brief 该函数生成一个epoll专用的文件描述符。它其实是在内核申请一空间,用来存放你想关注的socket fd上是否发生以及发生了什 |
2011年01月21日 星期五 上午 9:02 平时大家使用 epoll 时都知道其事件触发模式有默认的 level-trigger 模式和通过 EPOLLET 启用的 edge-trigger 模式两种。从 epoll 发展历史来看,它刚诞生时只有 edge-trigger 模式,后来因容易产生 race-cond 且不易被开发者理解,又增加了 level-trigger 模式并作为默认处理方式。 二者的差异在于 level-trigger 模式下只要某个 fd 处于 readable/writable 状态,无论什么时候进行 epoll_wait 都会返回该 fd;而 edge-trigger 模式下只有某个 fd 从 unreadable 变为 readable 或从 unwritable 变为 writable 时,epoll_w |
2011年01月18日 星期二 下午 3:06 看官兄弟姐妹们,你们都点过“理解epoll的实现”的标题了,我想就不用再说epoll()如果使用的废话云云了。直接进入正题吧: epoll_create() 系统调用 首先,我们注意epoll_create()返回的是一个文件描述符,这是epoll()与select()/poll()族系统调用的一点显著不同。有文件描述符就一定有对应的文件系统,这个特殊文件系统,在RHEL5.4内核(主要基于2.6.18,混合了部分2.6.2x的代码) |
2011年01月18日 星期二 下午 2:06 2011年01月16日 星期日 下午 5:56 2011年01月16日 星期日 下午 3:20 [转]感觉zeromq的特点是:将所有io处理由多个io线程单独完成,io线程与应用线程独立。每一个io操作的对象都与一个io线程绑定,它的所有io操作都有该io线程完成。线程间通过一种command_t格式,通过传送命令类型和对象指针,将本该由应用线程调用的函数,交给io线程完成。app线程发送和接收时通过队列和io线程交换数据。 处理流程 1. zmq初始化(zmq_init())。 主要实现在ctx_t::ctx_t()中,初始化了signalers数组,创建了多个io线程(io_thread_t),每个io线程和app线程都有 |
| | |