具体servlet的请求处理,这个是分配给线程池线程处理的,servlet容器都这样实现,这个没什么问题。我主要来说说其它的。
线程池的作用
从其他人的回答看,都是太高看线程池本身的作用了。
线程池作为一种资源池(这里的资源就是线程了)模型,最大的优点是重复利用已经创建的线程,避免线程的反复创建和销毁带来的处理器和内存的消耗。而除此之外,它需要配合其它机制才能发挥更大的作用。
请求到达服务器后,如果线程池没有可用线程,请求会进入队列排队,如果超过队列最大阈值会被丢弃。重点来了,如果你的请求处理服务会有如数据库调用/远程服务调用的IO处理,而你用的阻塞模型,则这个线程在请求处理完成之前并不能返还到线程池供其它请求服务。这种长期占用线程的行为,会严重限制请求的并发。线程的有效利用率太低,大部分时间都在阻塞中,这个和你有没有线程池没有关系。所以要在高并发的情况下保证性能,重点是你的服务内部的使用异步IO避免阻塞。这样在你某个请求处于IO等待期间,当前线程可以返还给线程池继续提供服务。
(补充)
下面有朋友提到了请求队列,这里简单说下。
请求队列是所有服务器程序都会考虑和设计的一个机制,这样的机制实际上起缓冲层作用,避免服务器在请求过多时崩溃。以Tomcat为例,Connector中有下面几个关键配置。
acceptCount就是允许未处理请求队列的长度(backlog),默认是100,可以根据实际情况做调整。
更多的配置参见官方文档。如果有时间,会写一个Tomcat具体如何实现请求队列及它的处理文章。
请求响应
更友好的体验还要从客户端出发来考虑,如果你能缩短请求的处理时间,客户端体验是极好的,比如成都访问杭州阿里云服务器,空载来回大概40ms的时间,如果你的服务处理控制在10ms以内,请求在50ms就可以返回,是不是很舒服?当然如果是静态资源做CDN几ms就可以完成。
要缩短请求响应时间,可以从两方面入手:
1、将服务分解成多个可以并行处理的任务,这里的任务一般都会包含一个异步IO调用,然后并行执行。
2、将不影响响应结果的子任务异步处理,提前返回响应。比如推送消息,日志记录等。考虑一些极端的情况:在双11和秒杀场景,只有商品的库存处理是最核心的,这个环节处理完就可以结束本次处理,像支付这种繁琐的处理就可以延后,还有部分 *** 作都可以放入异步队列继续处理。
将请求分解异步并行化后,实际上又会多出很多线程切换,这个时候线程池的作用就被放大了。
总结
仅仅有线程池而没有异步并行框架的支撑,线程池其实只能发挥很小的作用,在高并发情况下它必不可少,但非最核心的那个东西。我们一般的Web应用都是IO密集型的,只要保证服务内的IO都异步化,线程池只需非常少量的线程就可以应对大量并发。
分类: 游戏 >> 单机游戏问题描述:
有个问题我一直不懂,比如说:我在别人的网站下载一个文件,用的迅雷,搜索到两个资源,下载对方的一个文件,为什么会是两个资源 听人说对方服务器是用一种软件,把文件分割开就成两个资源了,分割多少块就多少资源,是这样的吗用什么软件能做到这样
我是菜鸟,不太懂,懂的大哥们教教我,小弟先谢谢了
解析:
迅雷现在很流行,风头早已超过了flashget和ants等等多线程下载工具。大多数情况下,它的下载速度确实比较快,具体为什么会有比较快的下载速度呢。下面将做一些探讨。
迅雷声称自己的是P2SP的下载技术。P当然是用户peer,SP是资源的提供商service provider下面是迅雷官方给出的介绍:
技术特点
迅雷使用的多资源超线程技术基于网格原理,能够将网络上存在的服务器和计算机资源进行有效的整合,构成独特的迅雷网络,通过迅雷网络各种数据文件能够以最快的速度进行传递。
多资源超线程技术还具有互联网下载负载均衡功能,在不降低用户体验的前提下,迅雷网络可以对服务器资源进行均衡,有效降低了服务器负载。
功能列表
全新的多资源超线程技术,显著提升下载速度;
功能强大的任务管理功能,可以选择不同的任务管理模式;
智能磁盘缓存技术,有效防止了高速下载时对硬盘的损伤;
智能的信息提示系统,根据用户的 *** 作提供相关的提示和 *** 作建议;
独有的错误诊断功能,帮助用户解决下载失败的问题;
病毒防护功能,可以和杀毒软件配合保证下载文件的安全性;
自动检测新版本,提示用户及时升级;
提供多种皮肤,用户可以根据自己的喜好进行选择;
为了说明迅雷的工作原理,再给一个迅雷的官方工具给大家,以更清晰的讨论迅雷的下载原理。在迅雷的官方论坛里面有个顶置帖子:
bbsxunlei/phpwind/readphptid=69234&fpage=1,里面有一个测试工具,是测试客户端与迅雷的官方服务器的连接速度。
图中可以看出,使用到了三台服务器:一台是资源服务器,两台注册服务器(tcp和udp)
帖子中还给出了一个调查:
投票主题:关于端口被封的调查!
3076端口被封(将找不到多资源)56 票
5200端口被封(将无法进行雷区注册)67 票
6200端口被封(会隔一段时间就会掉下雷区,需要重新登陆)70 票
由此可以看出,资源服务器负责提供下载的资源情况,使用3076端口。这台资源服务器到底提供的是什么资源呢?在迅雷5中,可以查看当前下载的文件连接的资源是哪些。有服务器地址也有单独的peer。当然很明显,peer的连接没有服务器连接稳定。
原理分析
当用户需要下载资源时,例如要下载“abc/fileexe”这个文件,那么一方面直接向“abc”这个服务器发送一个>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)