石头的奔跑

一沙一世界

  • 博客访问: 296734
  • 博文数量: 75
  • 博客积分: 667
  • 博客等级: 上士
  • 技术积分: 1295
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-27 15:59
个人简介

石头,奔跑,直到化为一粒沙,何况一沙一世界

文章分类

全部博文(75)

文章存档

2017年(3)

2016年(11)

2015年(19)

2014年(9)

2013年(5)

2012年(21)

2011年(3)

2009年(4)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: 服务器与存储

读陈硕的《linux多线程服务器端编程》,颇有感觉,下面是阅读服务器端模型部分的笔记。
这部分内容主要对比了UNP上的几种和当前比较实用的几种的比较,我们说UNP上列出的几种是传统的服务器模型,当前比较流行的几种是新型的服务器模型。UNP上的几种模型是在当时的网络使用条件下的总结,而现在,由于网络的普及,人们对网络实用的频繁,使得传统的网络模型不太适应当前的大规模网络实用情况。 对于UNP上提到的几种在此我们不做过多解释,大家可以网上搜索,一堆一堆的实例说明。接下来我们主要说说几种当下比较流行,实用的几种模型:

大家忽略下面字的难看度吧,只是为了大家看到每一列的意思添加的。
在说这几种并发模型前先再啰嗦下几个概念。
下面先说说NO-blocking IO多路复用和reactor模型。

IO多路复用:是指文件描述符设置非阻塞,因为阻塞描述符浪费性能,所以就有非阻塞一说,具体使用上就是说呢,比如你在一个描述符上read,如果有数据可读,那么返回数据,没有数据可读呢,返回EAGAIN或者EWOULBLOCK,具体那究竟什么时候读描述符就能保证肯定能读到数据了呢,总不能一直读吧,一直返回EAGAIN,那不还是浪费吗?所以就有了select、poll、epoll的存在了,这三个可以wait的函数就像传达室的老大爷,平时他们尽量找时间在躺椅上睡一会,快递员送来快递,他一一登记,然后告诉同学们谁的快递到了,下来取吧,同学们赶紧去拿货。而不用自己一会一会的在楼下打听你的货到了没有。而老大爷的效率之所以高,是因为他可以同时接到快递的多个货物,这里呢,老大爷就是select/poll/epoll函数,每个同学都是文件描述符,而快递送来的货可以认为是连接,当然快递就可以认为是网络啦。其实可以这样认为,noblocking没有消失,不过是从每个文件描述符转移到一个统一管理的函数上,而这个统一管理的函数本身还是阻塞的。 还是上面的传达室大爷收到快件,告诉同学们有快递这件事情的方式体现在select/poll/epoll上是不同的,下面顺便也说说。

select和poll:快递送来快件,但是这个快件上的名字没有写,老大爷就得让同学们都一个一个下来看是不是自己的,是就拿走,不是就让下一个同学过来继续看是不是他自己的,直到找到谁的快递。这样呢,好多同学就白白下来跑一趟
epoll:快递送来快件,上面有明确的名字,所以老大爷直接喊一嗓子,人就下来取了。这回,没有快递的同学就不用下来了。
很显然,epoll的效率要高。
接下来,我们在说说服务器编程的两种流行模式proactor和reactor。这里的模式对应上面的传达室老大爷的例子呢,就是有快递的时候,怎么让收件人拿到快递的方法。
reactor模式:提前和老大爷打招呼,这几天我应该有快递,如果快递来了,麻烦您老人家告诉我一声,然后我来取就可以啦。proactor模式:也是提前和老大爷说一声,这几天呢,我有快递,这个快件会被直接送到我宿舍,等我收到快件的时候呢,我给你打个电话,麻烦你记录下这个快递给我送快件的时间。大家可以看看,两者其实只是先通知再干活,还是先干活再通知的区别。
今天先到这里吧。
阅读(6995) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册