自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xiaofei chain

大并发服务器研究

  • 博客(50)
  • 资源 (3)
  • 收藏
  • 关注

原创 大并发服务器不得不说的技术--writev

前面我们说过,对于静态文件的传输,用sendfile可以减少系统调用,现在我们看看动态的数据应该如何处理。 首先,如果数据足够小(小于1024)且只有唯一的一个buffer,我们直接用 send/write 就可以了。 通常的情况下,程序可能会在多个地方产生不同的buffer,如 nginx,第一个phase里都可能会产生buffer,放进一个chain里, 如果对每个buffer调用一次s

2013-03-20 11:26:58 8783 2

原创 大并发服务器不得不说的技术--tcp cork

如果把tcp当成服务端与客户端的管道,cork 就是给管道加个塞子。 为什么 要加个塞子呢? 先来举个例子: int times = 10; while( times--) { send( sock_fd, buf, 1, 0 ) } 这段program会发送数据10次,每次就发送1个字节,这样会不会什么问题呢? 记得以前农忙的时候,田里的稻子收割完了,要打成

2013-03-17 08:36:54 3638 3

原创 大并发服务器不得不说的技术--sendfile

socket发送函数。 int send( SOCKET s, const char FAR *buf, int len, int flags ); 如果内容是动态生成的,一般是把传输内容直接丢给buf中用send函数传输,没有优化的空间。 文件传输则要先把内容read到buf中,因此至少两次内核调用,如果文件很大,可能会用一个循环调用,如: while( size == P

2013-03-16 18:11:51 3069

原创 什么样的服务器才能叫做大并发

我觉得服务器在成为大并发前,首先要能承受住大并发的压力,无论能否正常返回,首先不能崩溃。 apache和nginx是两个出名的服务器,先来分析一下它们。 大量用户访问的时候,apache会创建大量的进程数,吃掉大量的内存,而nginx内存这块做得很好,不过这也是nginx的瓶颈所在。 所谓有内存就是给你花的,你不花怎么对得起服务器呢,何况现在的服务器一般都是高配。 快速响应与内存大小其实是

2013-03-13 15:40:50 4925 10

原创 epoll 事件处理的细节分析2

准确的说epoll事件就是IO事件,包括文件、socket、pipe等,linux把他们统称为文件,统一的接口调用,驱动层不同实现。 这里分成四类: 监听套餐接字,链接套接字,文件,pipe,相应的触发条件 1.监听套接字: 有新链接连上临听套接字,并三次握手成功时 2.链接套接字 有IO读写,且传输层接收/发送完毕 3.普通文件 有IO读写 4.pipe 有IO读写,且有锁保

2013-03-13 12:13:42 2561 1

原创 epoll 事件处理的细节分析

先来纠正一下观念。 epoll 是区分读写事件,这主要取决于底层驱动的支付。 如: struct epoll_event ee; ee.events= EPOLLIN | EPOLLOUT; epoll_ctl( epfd, EPOLL_CTL_MOD, fd, &ee ); 等来事件可读的时候 epoll_wait 返回的 ee.events 就会是 EPOLLIN 可写

2013-03-13 11:23:21 2048

原创 epoll 事件处理的技术内核分析

epoll高效机制其实就是内核回调,我们知道linux把socket也是当成file处理的,只是底层驱动不一样。 先来看看内核文件结构: struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*re

2013-03-13 11:00:06 2608

原创 对于nginx的思考2---事件处理

nginx的事件处理函数ngx_process_events_and_timers,linux上最终会调用 ngx_epoll_process_events。 之后epoll_wait 后得到相应的事件,再做相应的处理,即监听与处理是在同一个线程中处理的,这样会有几个问题: 1.如果有多个事件,必须等待上一个事件处理完毕才能处理下一个。 2.同一个connection,只能按”接收-发送-接

2013-03-12 12:08:22 1852 1

原创 对于nginx的思考

作为轻理级web server,nginx的优势明显,尤其是对反向代理,负载均衡的处理。 nginx对IO用filter模型实现gzip的处理,可以新增filter,增删模块。 开发人员对于nginx的模块开发热情,似乎有渐涨的趋势,国内最出名的要算taobao了,开发了了很多模块(http://openresty.org)。 但是模块多了,用的人维护起来也是一个麻烦事,也偏离了nginx的

2013-03-12 11:25:24 2104

原创 epoll 处理并发的一些想法

首先,epoll 是线程安全的,系统调用的底层有锁保护。 这就意味着,多线程处理的可行性: 线程A监听,线程B负责处理,当A线程 accept 一个 socket后传递给B,B处理完后,可以直接关掉socket,并调用 epoll_ctl 来取消A线程与socket的关联。 考虑到并发性,可以建立监听线程池C与处理线程池D。 考虑到业务的无关联性,可以为connection建立小的生命周期

2013-03-12 11:02:39 2448

服务器端代码(异步,大并发)

一个函数实现异步高并发服务器 fcntl( sock_client, F_SETFL, flag ); tobe_event.events = EPOLLIN | EPOLLET; tobe_event.data.u32 = my_empty_index; epoll_ctl( epfd, EPOLL_CTL_ADD, sock_client, &tobe_event );

2013-03-31

服务端代码(阻塞)

http://blog.csdn.net/xiaofei_hah0000/article/details/8742997 代码示例

2013-03-31

客户端代码

http://blog.csdn.net/xiaofei_hah0000/article/details/8742707 文章示例代码

2013-03-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除