让我们来考虑一个场景,你和百万玩家的魔兽世界的忠实粉丝。时间之旅打每到周末boss。

每当周末比赛server在亚历山大,因为至少在同一时间数十万用户在线。

假设我们的多-threaded果酱server作为游戏server这是可行的?本场比赛首先分析server有什么特点:

①  网络游戏并不是像网页一样。打开一旦下载完就能够关闭连接结束。

网游必须是有一个持久有状态的连接,每个client都须要跟server存在一个持久的连接。以便高速及时发送消息。而随着并发用户数量的添加,多线程堵塞server不可能为每个client分配一个线程。

②  跟一般的应用server不同,CS结构的网络游戏一般把复杂的逻辑处理放到了client。而在游戏server端仅仅处理比較简单的逻辑,甚至仅仅是传递消息。像这样简单的逻辑我们居然给每个请求分配一条线程。这是不是严重脱离实际了?

③  网游讲求的是响应快,消息交换及时,而且能进行双向通信。那必定须要频繁请求跟响应,假如我们已经採用了长久连接。但server并非每次都有新数据,并不须要发送给client,那我们还占了一条线程,是不是太浪费了?

从以上几点分析。像网游这种场合,我们传统的多线程server显然已经力不从心。线程池能在一定程度上缓解频繁的IO调用带来的资源占用,但池有一定的限制大小。在面对成千上万的client请求大并发情况下。却始终不是最佳方案。有没有可能用一个或少量的线程就能够维护非常多持久连接呢?以下介绍一种新的server模型——非堵塞server模型。

非堵塞server模型最重要的一个特点是,在调用某个接口后马上返回,而不会堵塞等待。如图2-6-2-1中所展示,当多个client向server请求时。server端会保存一个socket连接列表,然后有一个专门的线程对这个列表进行轮询。

假设发现某个socket有数据可读。就调用该socket的对应的读操作。反之,发现socket有数据可写的话,就调用该socket的对应的写操作;假设发现某个socket已经中断,就调用socket关闭操作。为了有更好地性能。还能够结合线程池,一旦检測到有须要处理(读数据、写数据、关闭)的socket就启动另外一条线程负责处理。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3lhbmd6aGl6aG91/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

图2-6-2-1 非堵塞server模型

这样看来,无论多少个socket连接都能够被一条线程管理起来。一条线程负责遍历这些socket列表,处理再交给线程池,非常好地利用了堵塞的时间,处理能力得到提升。

但这样的模型涉及到遍历全部的socket列表,同一时候须要处理数据的拼接。空暇时也占用较多CPU资源,仍然不适于大并发场景。再稍做改进——事件驱动模型。它的核心是事件驱动,线程遍历的并不是socket列表。取而代之的是检測事件。对检測出来的事件进行逐一响应。极大提高了检測效率。自然处理能力也更强。

喜欢研究java的同学能够交个朋友,以下是本人的微信号:

版权声明:本文博主原创文章,博客,未经同意不得转载。

非阻塞IOserver型号的更多相关文章

  1. 阻塞IO、非阻塞IO的区别

    1.类与类之间的关系:依赖,实现,泛化(继承),关联,组合,聚合. 1)依赖(虚线):一个类是 另一个类的函数参数 或者 函数返回值. 2)实现(实线加小圆):对纯虚函数类(抽象类)的实现. 3)继承 ...

  2. 如何解读 Java IO、NIO 中的同步阻塞与同步非阻塞?

    原文链接:如何解读 Java IO.NIO 中的同步阻塞与同步非阻塞? 一.前言 最近刚读完一本书:<Netty.Zookeeper.Redis 并发实战>,个人觉得 Netty 部分是写 ...

  3. 哪5种IO模型?什么是select/poll/epoll?同步异步阻塞非阻塞有啥区别?全在这讲明白了!

    系统中有哪5种IO模型?什么是 select/poll/epoll?同步异步阻塞非阻塞有啥区别? 本文地址http://yangjianyong.cn/?p=84转载无需经过作者本人授权 先解开第一个 ...

  4. 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型

    1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...

  5. 非阻塞/异步(epoll) openssl

    前段时间在自己的异步网络框架handy中添加openssl的支持,当时在网络上搜索了半天也没有找到很好的例子,后来自己慢慢的摸索,耗费不少时间,终于搞定.因此把相关的资料整理一下,并给出简单的例子,让 ...

  6. 同步与异步 & 阻塞与非阻塞

    在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 一.同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用 ...

  7. 网络IO之阻塞、非阻塞、同步、异步总结

    网络IO之阻塞.非阻塞.同步.异步总结 1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一 ...

  8. (转)NIO与AIO,同步/异步,阻塞/非阻塞

    原文地址: http://www.cnblogs.com/enjoy-ourselves/p/3793771.html 1.flip(),compact(),与clear()的使用 flip()内部实 ...

  9. Linux下的串口编程及非阻塞模式

    本篇介绍了如何在linux系统下向串口发送数据.包括read的阻塞和非阻塞.以及select方法. 打开串口 在Linux系统下,打开串口是通过使用标准的文件打开函数操作的. #include < ...

随机推荐

  1. android旋转动画和平移动画具体解释,补充说一下假设制作gif动画放到csdn博客上

    先上效果图: 我这里用的是GifCam来制作的gif动画,能够在http://download.csdn.net/detail/baidu_nod/7628461下载, 制作过程是先起一个模拟器,然后 ...

  2. HTML5特性检測

    HTML5特性检測:    1.检測全局对象:诸如window或navigator是否拥有特定的属性    2.创建元素:检測该元素的DOM对象是否拥有特定的属性    3.创建元素:检測该元素的DO ...

  3. 逆向project第004篇:令计算器程序显示汉字(下)

    一.前言 钩子技术是一项很有有用价值的技术.在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见<反病毒攻防研究第012篇:利用In ...

  4. 在自己的base脚本中实现自动补全

    在90年代Linux和DOS共存的年代里,Linux的Shell们有一个最微不足道但也最实用的小功能,就是命令自动补全.而DOS那个笨蛋一直到死都没学会什么叫易用. Linux的这个微不足道的小传统一 ...

  5. 解决backgroud:transparent在低版本浏览器中的bug

    今天在html页面上定义了一个button和一个div,大小相同,button使用绝对定位,覆盖在div上面一层,同时样式设置背景透明(background:transparent). 这样就可以在看 ...

  6. ecshop 后台添加 成本价 利润

    ecshop后台admin中的商品操作php文件,goods.php替换为下面的代码, 还要在数据库商品本店售价后门添加  cost  字段 为 商品成本价 ecs_goods表中添加  cost  ...

  7. 聊天demo SignalR

    1首先这个demo是针对 net版本是4.5的  SignalR   获取的是2.2的 2新建一个mvc项目 3  Nuget  搜索 SignalR   安装如图的一项 4新建一个 集线器类 修改新 ...

  8. 使用Hamcrest增强JUnit的测试能力

    package com.jadyer.service; import java.util.HashMap; import java.util.Map; import org.hamcrest.Matc ...

  9. [Web Chart系列之五] 6. 实战draw2d之ConnectionRouter

    前言 ConnectionRouter 的作用是定义连线的展示样式. 是直线连接还是曲线连接(好像也是基于Bezier曲线) 位于包: draw2d.layout.connection 下. 常见的有 ...

  10. 关于产品的一些思考——腾讯之QQ音乐

    --------------------2014.5.11-------------------- 原来一直使用小米手机自带的音乐播放器,除了搜歌下载不方便,其它的还好(省电是最大的长处),用过Jin ...