设为首页 收藏本站
查看: 4189|回复: 0

[经验分享] Apache Mina 源码分析。

[复制链接]

尚未签到

发表于 2015-8-1 07:02:36 | 显示全部楼层 |阅读模式
  

  入口点是:ScoketAcceptor.bind。
  
  SocketAcceptor初始化的时候,1. 绑定executor / 2 新建SocketIsProcessor.
  
  startupWorker();
  ==>
  selector = Selector.open(); // selector 是java.nio的一部份
  worker = new Worker();// RUnnable
  executor.execute(new NamePreservingRunnable(worker, threadName));
  在无参数初始化中,executor =  NewThreadExector = new Thread(Runnable).start(); runnable = NamePrxxx
  NamePreservingRunnable =  runnable.run(); = worker.Run
  
  所以启动之后,就调用了WOrker的run =》
  for (;;)是个无限循环。
  
  http://www.javaeye.com/topic/40489
  
  大致就是以上逻辑。
  --------------------------------------------------
  http://www.z6688.com/info/47547-1.htm
  .net socket 性能比较:
  

  这个内容在cnblogs中也讨论过很多次了,这两天大概看了一些资料,看到一些简单的性能指标拿出来和大家讨论一下。
  socket + threads/threadpool
大概性能:小于1500个连接
  实现:accept一个socket,就交给一个线程去管理,比较笨,但也比较有效,因为是同步方式,控制起来很方便。高级点的,就是交给一个线程池去管理,线程池由系统自动托管,省去了开销线程的时间。一般小型项目,用这个完全足够,开发也简单。但要注意,如果若干socket长时间占用线程池中的线程,同时其它连接数又比较多,很容易出现提示说你没有足够的线程供使用。呵呵,让socket少做点事,少占用时间,换一个快点的cpu是不错的方式。另外,如果有一些比较好的第三方线程池组件,也可以选择使用,比如smartthreadpool。
  socket + select
大概性能:大于1500个连接后性能下降
  实现:select是很常用的一种模型。是在阻塞功能中轮询一个或多个socket,将要处理的socket放到一个ilist中,当select轮询结束后,然后我们再自己处理这个ilist中的socket。具体的用法可以看一下msdn。select的效率并不能说是高的,因为当队列中待处理的socket比较多的时候,处理最后几个socket相当于要遍历所有前面的socket,非常不划算的。

  socket + asynchronous
大概性能:约7500个客户端连接
  实现:beginxxxx,endxxxx,再熟悉不过了吧。异步socket归根到底,还是用的线程池技术,用线程池来处理异步io。这就又引出个问题,.net的线程池又是用的什么实现方式,以前看过有人说,.net的线程池是用的完成端口来实现的,我不知道这样的说法是不是正确,从查到的资料中也没有办法确认(希望这点有朋友可以告诉我)。异步socket对于程序的处理流程来说比同步复杂了许多,异步回调函数的控制不如同步方式那样直观。但有一点我想应该是要注意的,就是回调函数应该轻装上阵,不应该处理过多的事务,对传递数据的处理,应该交给其它线程进行处理。
  
  iocp(完成端口)
大概性能:约20000~50000个客户端连接
  实现:现在.net下有一些伪iocp,大家可以去搜索一下,还没有见过开放出来的用这些伪iocp来实现的socket例子。我说的20000~50000个客户端连接,是指在c++下开发的情况,这样的情况下,需要用到的基本技术还包括内存池、查询算法等。
  
  伪iocp能实现多少最大连接,没有资料可以查,如果有朋友知道,可以讨论一下。另外上面提到的许多数据,是从一些资料上摘抄下来的,我没有自己试过,仅仅是拿出来和大家讨论一下。我想,一个高性能的服务端程序,可能需要的技术不仅仅是采用什么模型,还有许多细节需要注意,比如内存的处理,采用什么算法等等,当然,这仅仅是软件成本上的,硬件上肯定也是需要投入的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-92807-1-1.html 上篇帖子: 文件上传之Apache commons fileupload使用 下篇帖子: 在WindowsXP搭建Apache+MySQL+PHP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表