文章列表
 
您正在查看 "异步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 都使用这一手段来让并行任务之间协同工作。

最近读完了 ZeroMQGuide。写的很不错。前几年一直有做类似的工作,但是自己总结的不好。而 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

http://www.cnblogs.com/yunboy4/archive/2009/08/04/1538915.html

 

select模型

select(选择)模型是winsock中常见的I/O模型。之所以称其为“select模型”,是由于它的
“中心思想”是利用select函数,实现对I/O的管理!最初设计该模型时,主要面向的是某些使用
Unix操作系统的计算机,它们采用的是Berkeley套接字方案。select模型已经集成到Winsock1.1中。

1

 
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

http://dev.firnow.com/course/3_program/c++/cppsl/20081010/149888.html

 cat /proc/sys/fs/file-max 

1602370

 

1.支持一个进程打开大

 
2011年01月16日 星期日 下午 5:56

http://blog.csdn.net/Solstice/archive/2010/03/03/5343217.aspx

陈硕 (giantchen_AT_gmail)

Blog.csdn.net/Solstice

2010 March 3 - rev 01

《多线程服务器的适用场合》(以下简称《适用场合》)一文在博客登出

 
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线程都有

 
   
 
 
文章分类
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Hadoop(72)
 
   
 
文章存档
 
     
 
最新文章评论
  

链接都是坏的诶,lz什么情况啊~改改么
 

very good。就是刚开始的文字描述部份,稍有错误:服务器发送一个ACK包给客户,客户端
 

Good
 

我最近就在做这种NP问题,蛮有意思,很多人觉得没啥用,但觉得挺有意义的!
 

哇!巨人啊!!
   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu