Acceptor是JIoEndpoint的内部类,主要的职责就是监听是否有客户端套接字连接并接收socket,再将socket交由任务执行者(Executor)执行。不断从系统底层读取socket,接着做尽可能少的处理(最好就是接收到后不做任何处理),最后扔进线程池。为什么强调要做尽可能少的处理?这里关系到系统性能问题,过多的处理会严重影响吞吐量。因为tomcat默认只有一个接收器(一条线程负责套接字接收工作),所以它对每次接收处理的时间长短将很可能对整体性能产生影响。

于是接收器所干的活都是非常少且简单的,仅仅维护了几个状态变量、流量控制闸门的累加操作、serverSocket的接收操作、设置接收到的socket的一些属性、将接收到的socket放入线程池以及一些异常处理。其他需要较长时间处理的逻辑就交给了线程池,例如对socket底层数据的读取,对http协议报文的解析及响应客户端的一些操作等等。很精妙地将事务剥离,远远提升了系统处理响应性能。

图Acceptor

用一个简化的代码表示接收器处理的过程则是

publicclass Acceptor implements Runnable{

public void run(){

while(true){

limitLatch.countUpOrAwait();//流量控制闸门信号量加一

Socket socket =serverSocket.accept();

将接收的socket扔进线程池;

}

}

}

点击订购作者《Tomcat内核设计剖析》

Socket接收器——Acceptor相关推荐

  1. c++ 多个线程操作socket要同步吗_基础知识深化:NIO优化原理和Tomcat线程模型

    1.I/O阻塞 书上说BIO.NIO等都属于I/O模型,但是I/O模型这个范围有点含糊,我为此走了不少弯路.我们日常开发过程中涉及到NIO模型应用,如Tomcat.Netty中等线程模型,可以直接将其 ...

  2. boost.asio系列——socket编程

    asio的主要用途还是用于socket编程,本文就以一个tcp的daytimer服务为例简单的演示一下如何实现同步和异步的tcp socket编程. 客户端 客户端的代码如下: #include &l ...

  3. 可扩展多线程异步Socket服务器框架EMTASS 2.0

    本文原创版权归 CSDN hulihui 所有,转载请按照如下方式显示标明原创作者及出处,以示尊重!! 作者: hulihui 原文:http://blog.csdn.net/hulihui/arch ...

  4. 朝花夕拾之socket的基本使用以及mina框架简单介绍

    工欲善其事,必先利其器,从互联网诞生到现在,基本上所有的程序都是网络程序,很少有单机版的程序了. 而网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.我们现在进行网络编程 ...

  5. boost::asio译文

    boost::asio译文 Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布( ...

  6. Boost.Asio技术文档汇总

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

  7. Boost.Asio的网络编程

    简介 这篇笔记是boost::asio的概览, 主要说明了boost的进行CS结构编程的基本步骤. 在网络编程中, 又很多需要IO的操作. 一种是使用Linux的原生C语言API, Linux的核心编 ...

  8. boost::asio中文文档

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

  9. boost------asio库的使用2(Boost程序库完全开发指南)读书笔记

    网络通信 asio库支持TCP.UDP.ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好地封装了原始的Berkeley Socket Api,展现 ...

最新文章

  1. 逆水寒服务器新消息,游戏新消息:逆水寒太火爆服务器爆满王思聪都挤不进去...
  2. java gson使用_Java 中 Gson的使用
  3. 发布国内首个无服务器容器服务,运维效率从未如此高效
  4. vue axios拦截器的封装
  5. 如何禁用不需要的HTTP方法
  6. 数学篇--初中数学知识
  7. DirectX 修复
  8. 说说百度iOS人脸识别的痛
  9. java类加载机制之类加载过程、类加载器及双亲委派模型详解
  10. 数学中矩阵乘积转置等的相关求导
  11. 方差var、协方差cov、协方差矩阵(浅谈)
  12. 易优cms 后台登录报:验证码错误 Eyoucms快速入门
  13. MySql 查询数据库中所有表名
  14. java 加密工具类
  15. 017利用颅内和头皮脑电图进行癫痫预测的卷积神经网络2018
  16. 官方认定!IT程序员正式成为“新生代农民工”-道合顺大数据
  17. 2019年云架构和云计算趋势如何?|中机智库干货
  18. 业务安全情报,预知发现黑灰产的企业攻击
  19. idea编译报错:Refer to the generated Javadoc files in ‘..targetapidocs‘ dir. 解决
  20. 六一大放送: AI Studio精选用户项目推荐榜单

热门文章

  1. Microsoft System Center 2012:将系统管理带入云中
  2. Hubble.net 简介及与Lucene.net 对比测试
  3. c语言变量及输入输出
  4. 查询一个字符串的子串出现的次数在sql中
  5. 并发编程实战-读书笔记
  6. ORA-16629: database reports a different protection
  7. C# 利用SharpPcap实现网络包捕获嗅探
  8. POJ2594 Treasure Exploration[DAG的最小可相交路径覆盖]
  9. 业余实现一个统计A股数据工具
  10. 【转】Redis安装整理(window平台和Linux平台)