-
请求连接建立过程(以NIO为例)
前面有提到,从线程池中固定分配了一个线程专门用于等待新连接,就是上图的监听线程,没有请求来时,该线程是阻塞在accept()方法上的,当新连接来建立连接时,accept方法分配了一个socket,并将其设置为nonblocking,最后要做的就是将该socket丢给某个Acceptor线程(基本上机会均等)处理,然后立马返回继续处于接受状态,可以这个线程的工作是相当的简单的,效率那也是相当的高。
Acceptor线程有很多个(全部来自于线程池,并且固定分配出来,基于jetty.xml配置中的Acceptors配置数量),每个线程都维护了一个SelectSet,每个SelectSet又对应了一个Selector,这些线程会检测当前是否有任务来,例如检测changes队列中是否有任务,有并且是新连接,那么就迅速建立一个endpoint
- <script type="text/java script">BAIDU_CLB_fillSlot("771048");
- 点击复制链接 与好友分享! 回本站首页 <script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732">
<script type="text/java script" id="bdshell_js">
<script type="text/java script">
var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}};
document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)