当前位置:  技术问答>linux和unix

如果连接客户过多,线程池如何处理呢?

    来源: 互联网  发布时间:2015-07-24

    本文导语:  服务器程序使用线程池,比如开始的时候派生1000个线程来处理客户请求,当有1001个客户都请求连接那应该怎么办? | 线程池的出发点不是说增加连接的吞吐量,而是减少系统建立线程、撤销...

服务器程序使用线程池,比如开始的时候派生1000个线程来处理客户请求,当有1001个客户都请求连接那应该怎么办?

|
线程池的出发点不是说增加连接的吞吐量,而是减少系统建立线程、撤销线程的开销

池内的线程是一直在的,通常是完成一项特定的任务,而这个任务常常是重复性较高的,
当工作完成后,这个线程就马上又可以进入空闲状态,为下一次工作服务

一个用户的连接,通常不是一个任务就完成的,也不大可能由一个线程从头到尾来负责(当然一般的应用中也可以这样做)

如果池内的线程确实不够用,也可以动态地变化池的大小,以容纳更多的工作线程

|
服务器程序使用线程池,比如开始的时候派生1000个线程来处理客户请求,当有1001个客户都请求连接,那么这个客户只能等到下一个线程空闲时,来处理它。apache就这样做的,在listen的第二个参数里指定等待的连接的最大个数,如果超过这个数,客户的connect会失败。

|
线程池不是这样用的。
线程的创建和销毁是极耗系统资源的。上千个线程争夺CPU时间,结果是所有的线程都没有时间。
即使有1000个客户请求,绝大多数应用中每个客户每秒钟交换消息的信息量是很少的。所以线程池的一个线程足以及时的响应几十或上百个服务请求。
线程池中的线程数目是不变的。每收到一个请求,就将它分配给一个线程来处理。线程太多了,会使整个系统性能下降,太少了,又不能充分利用CPU。所以线程数目和CPU数目,系统性能有关。
在我们的系统中,每秒钟要处理100多个呼叫,每个呼叫持续几分钟,用SUN的NETRA220,只需要7,8个线程组成的线程池就搞定了。

|
要用集群了,把连接改到那个特定的IP就该可以了

|
1 一个线程不一定对应一个连接
2 一个机器不可能建立那么多连接,实际应用中,甚至连1000个都不能。

有些服务器的设计确实是先创建一定数量的线程,而且可能线程数就定下来了。

这样做的好处是不用再为线程的创建和撤消已经相关资源的分派开销时间。
另外,一个连接是一个任务,而线程则是用来执行任务的资源。就进程和CPU的关系差不多。

任务的执行可以是分时的。就是说一个连接可以不是时时刻刻都有一个线程为他做处理的。
这样,第1001个连接到来时,只不过会导致系统的整体响应速度有所下降而已。
当然,如果实际应用不允许这样的情况发生,就只好把第1001个挂起了。

如果是集群,那么肯定有一个负载平衡的部分,直接把这个连接送到还有空线程的服务器上去。

机群技术俺不怎么懂,不敢胡说了:)

|
1000万,别开玩笑了,一台服务器肯定是不可能完成的.有这么强的网卡吗?有这么强的操作系统吗?
应该使用集群,负载均衡的办法

|
可以参考LVS的实现

不过1000万实连接实在太吓人了

|
mark

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何控制Corba客户端的连接?(比如在服务器上可以关掉客户端的连接)(发言就给分)
  • linux端是服务器,客户端连接后,有时并不知道客户端断开,怎么侦测?
  • 用LINUX做HELIX服务器,用W2K做客户机,客户机视频点播,连接时出现问题!!!!
  • 在线请教:linux下用MySQL C API 连接MySQL 4.1.12出现的连接问题,提示升级客户端!!!!!!
  • 已和客户端连接建立的socket在客户端CTRL-C后怎么在服务器端捕捉这个错误?
  • Linux 代理 一个客户端来就创建一个连接
  • 客户与服务连接的问题.
  • socket怎样限制客户端连接数?
  • windows 客户机连接 samba 的权限问题, 急啊 ....
  • (腾讯面试)服务器如果和客户端在连接时假如连接被突然切断,服务器会立即感知到么
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • 请问诸位高手:如何在服务器上得到正在连接的客户端IP??
  • 服务器与客户端建立socket连接,如何获得端口号.谢谢
  • 如何在服务端控制客户连接,请高手指点!
  • 为什么客户端断开连接后,read的返回值是0?
  • 创建一个获取客户端连接IP地址的函数
  • 连接LINUX服务器的客户端一般用什么
  • 如何将客户端上传的ACCESS数据库用ODBC连接,即动态ODBC,急盼!
  • windows客户端telnet 与linux qmail连接问题
  • SOCKET同时接收客户端连接问题
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 什么是socket的长连接,以及如何实现长连接,长连接和短连接有什么区别?
  • 如何在windows上远程连接centOS桌面
  • 建立长连接的SOCET通讯后,如何检查长连接的有效性,如何获知连接状态
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • Oracle 表连接方式(内连接/外连接/自连接) 详解
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 关于inetd。我做了一个测试程序,想计算ftp最多能有多少了连接,我发现当连接到1020次就不可以连接了,哪位大侠知道如何做才能将连接数量增加至10000呢??
  • php中操作memcache的类及成员列表及php下如何连接memched服务器
  • 哪位给解释一下长连接和短连接的区别?
  • mysql jdbc连接mysql数据库步骤及常见参数详解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3