论坛首页 Java企业应用论坛

web支持高并发

浏览 18990 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-03-02  
最近有几个概念没搞清楚,比较困扰我?
1.常听说XX网支持百万的并发数,按照我们日常常用的tomcat为例子,单机支持上千的并发数就不错了,上百万需要多少台服务器啊?
2.链接,长连接和线程什么关系,维护一个长连接就需要一个线程吗,那百万的比并发,就需要百万的线程数码,可以一个tomcat中才能开启最多几百个线程数?
3.看到很多,如web QQ和这web旺旺这样的线上应用,每个客户端都需要维护一个长连接,几百万人同时现在,并发数都由使用的webserver决定,怎么支持那?
这几个概念一直比较混淆,求解答~
   发表时间:2013-03-03  
1, 并发数是个模糊的概念,不知道他们所谓的百万并发数是什么意思。是每秒百万并发,还是每分钟百万并发?用什么来衡量并发?一般网站的并发数应该指的是tcp连接的并发数。对于单台物理机器,其并发能力最高会到一个极限,就是本机最多维持的tcp连接的数量。如果要超过这个极限,就只能要多台物理机,还要有更强的交换机。如果要到达每秒百万并发tcp连接,这肯定需要很多很复杂,很高级的设备了。

2,你指的连接还是tcp网络连接吧?没有人规定一个连接就必须有且只有一个线程来对应。只是传统上习惯于用一个线程来处理一个连接,处理完后再处理另一个连接。百万并发不一定意味着百万的线程呀。如果处理每个连接只需要百万分之一的时间,那么单个线程就可以在一秒钟内处理完百万个连接,从外部看起来,就仿佛有百万个连接在同时运行,也就是一秒内并发百万连接了。

关键点就是要搞清楚,并发与并行的区别。
0 请登录后投票
   发表时间:2013-03-04  
问题很好,学习了
0 请登录后投票
   发表时间:2013-03-04  
sulong 写道
1, 并发数是个模糊的概念,不知道他们所谓的百万并发数是什么意思。是每秒百万并发,还是每分钟百万并发?用什么来衡量并发?一般网站的并发数应该指的是tcp连接的并发数。对于单台物理机器,其并发能力最高会到一个极限,就是本机最多维持的tcp连接的数量。如果要超过这个极限,就只能要多台物理机,还要有更强的交换机。如果要到达每秒百万并发tcp连接,这肯定需要很多很复杂,很高级的设备了。

2,你指的连接还是tcp网络连接吧?没有人规定一个连接就必须有且只有一个线程来对应。只是传统上习惯于用一个线程来处理一个连接,处理完后再处理另一个连接。百万并发不一定意味着百万的线程呀。如果处理每个连接只需要百万分之一的时间,那么单个线程就可以在一秒钟内处理完百万个连接,从外部看起来,就仿佛有百万个连接在同时运行,也就是一秒内并发百万连接了。

关键点就是要搞清楚,并发与并行的区别。


1.我说的并发,是指同一时间,比方说web qq,假如同时几十万人同时在线,每个长连接假如我都维护5分钟,在5分钟内我同时在线的人数假如有50W,那这时候就需要我每个线程处理一个长连接,这个连接不能断,就不可能让当前线程断了,在去处理其他事情,tomcat中多说可以配置最大支持上千的连接,那我们需要多少台服务器那?
2.我说的连接,是指http的长连接,现在我要做一个类似QQweb 的东东,每个用户都要维护一个长连接,假如我的用户数是同时在线10W,现在我用的额服务器是tomcat,配置为600,那我的差不多 10W/600的服务器数,这个还是保守估计,所以我就高不清楚,现在有些网页游戏,号称百万在线,那每个http长连接都需要一个线程处理,每台server的长连接数又是一定的,那岂不是要n多server支持。
1 请登录后投票
   发表时间:2013-03-04  
hello.world! 写道
sulong 写道
1, 并发数是个模糊的概念,不知道他们所谓的百万并发数是什么意思。是每秒百万并发,还是每分钟百万并发?用什么来衡量并发?一般网站的并发数应该指的是tcp连接的并发数。对于单台物理机器,其并发能力最高会到一个极限,就是本机最多维持的tcp连接的数量。如果要超过这个极限,就只能要多台物理机,还要有更强的交换机。如果要到达每秒百万并发tcp连接,这肯定需要很多很复杂,很高级的设备了。

2,你指的连接还是tcp网络连接吧?没有人规定一个连接就必须有且只有一个线程来对应。只是传统上习惯于用一个线程来处理一个连接,处理完后再处理另一个连接。百万并发不一定意味着百万的线程呀。如果处理每个连接只需要百万分之一的时间,那么单个线程就可以在一秒钟内处理完百万个连接,从外部看起来,就仿佛有百万个连接在同时运行,也就是一秒内并发百万连接了。

关键点就是要搞清楚,并发与并行的区别。


1.我说的并发,是指同一时间,比方说web qq,假如同时几十万人同时在线,每个长连接假如我都维护5分钟,在5分钟内我同时在线的人数假如有50W,那这时候就需要我每个线程处理一个长连接,这个连接不能断,就不可能让当前线程断了,在去处理其他事情,tomcat中多说可以配置最大支持上千的连接,那我们需要多少台服务器那?
2.我说的连接,是指http的长连接,现在我要做一个类似QQweb 的东东,每个用户都要维护一个长连接,假如我的用户数是同时在线10W,现在我用的额服务器是tomcat,配置为600,那我的差不多 10W/600的服务器数,这个还是保守估计,所以我就高不清楚,现在有些网页游戏,号称百万在线,那每个http长连接都需要一个线程处理,每台server的长连接数又是一定的,那岂不是要n多server支持。


3.既然一个多个tcp连接都可以公用一个缓存,tomcat中只需要用配置一个可维护的连接数不就对了吗,只负责接受请求,其他的就交个子线程来做

我实在是很含糊这些概念~
0 请登录后投票
   发表时间:2013-03-04  
100个人同时在线,是不是意味着服务器上保持者100个链接呢?

看这里 http://tomcat.apache.org/tomcat-7.0-doc/config/http.html  Standard Implementation的acceptCount,maxConnections和maxThreads这三个配置项分别配置的什么,有什么区别呢?

一台机器,一秒钟处理了100个链接,每个链接的处理时间为 10ms;另一台机器一秒钟同样处理100个请求,但是每个链接的处理时间都是1秒。这两台机器在一秒时间内的并发一样吗?

一台web服务器,同时保持了100个链接,但是它所在的硬件只有一个单核cpu。在一个cpu时钟周期的时间粒度上,有多少并发呢?

你想想以上这些问题。
1 请登录后投票
   发表时间:2013-03-04  
sulong 写道
100个人同时在线,是不是意味着服务器上保持者100个链接呢?

看这里 http://tomcat.apache.org/tomcat-7.0-doc/config/http.html  Standard Implementation的acceptCount,maxConnections和maxThreads这三个配置项分别配置的什么,有什么区别呢?

一台机器,一秒钟处理了100个链接,每个链接的处理时间为 10ms;另一台机器一秒钟同样处理100个请求,但是每个链接的处理时间都是1秒。这两台机器在一秒时间内的并发一样吗?

一台web服务器,同时保持了100个链接,但是它所在的硬件只有一个单核cpu。在一个cpu时钟周期的时间粒度上,有多少并发呢?

你想想以上这些问题。


恩恩,你说的这些我到时没想,但是我有个问题,如果保持一个长连接,如果是5s,是不是这5s就是一个线程独占,当前线程被hold住的,就是被锁的状态。是这样吗
0 请登录后投票
   发表时间:2013-03-05  
hello.world! 写道
sulong 写道
100个人同时在线,是不是意味着服务器上保持者100个链接呢?

看这里 http://tomcat.apache.org/tomcat-7.0-doc/config/http.html  Standard Implementation的acceptCount,maxConnections和maxThreads这三个配置项分别配置的什么,有什么区别呢?

一台机器,一秒钟处理了100个链接,每个链接的处理时间为 10ms;另一台机器一秒钟同样处理100个请求,但是每个链接的处理时间都是1秒。这两台机器在一秒时间内的并发一样吗?

一台web服务器,同时保持了100个链接,但是它所在的硬件只有一个单核cpu。在一个cpu时钟周期的时间粒度上,有多少并发呢?

你想想以上这些问题。


恩恩,你说的这些我到时没想,但是我有个问题,如果保持一个长连接,如果是5s,是不是这5s就是一个线程独占,当前线程被hold住的,就是被锁的状态。是这样吗


一般来说分两种情况,Blocking IO方式的服务器会导致一个线程独占,Non-Blocking IO不会这样,几个线程也可轻松管理数万连接。
3 请登录后投票
   发表时间:2013-03-05  
diggywang 写道
hello.world! 写道
sulong 写道
100个人同时在线,是不是意味着服务器上保持者100个链接呢?

看这里 http://tomcat.apache.org/tomcat-7.0-doc/config/http.html  Standard Implementation的acceptCount,maxConnections和maxThreads这三个配置项分别配置的什么,有什么区别呢?

一台机器,一秒钟处理了100个链接,每个链接的处理时间为 10ms;另一台机器一秒钟同样处理100个请求,但是每个链接的处理时间都是1秒。这两台机器在一秒时间内的并发一样吗?

一台web服务器,同时保持了100个链接,但是它所在的硬件只有一个单核cpu。在一个cpu时钟周期的时间粒度上,有多少并发呢?

你想想以上这些问题。


恩恩,你说的这些我到时没想,但是我有个问题,如果保持一个长连接,如果是5s,是不是这5s就是一个线程独占,当前线程被hold住的,就是被锁的状态。是这样吗


一般来说分两种情况,Blocking IO方式的服务器会导致一个线程独占,Non-Blocking IO不会这样,几个线程也可轻松管理数万连接。


你仔细思考我给你提出的那些问题,我想很多事情你是能想清楚的。tcp连接数和线程数之间并不存在必然的一对一关系,我想这一点你已经想明白了。

“如果保持一个长连接,如果是5s,是不是这5s就是一个线程独占,当前线程被hold住的,就是被锁的状态。”这个还是取决于程序的设计。你想想servlet 3.0 的  AsyncContext 有什么用。 跳出java的圈子,你想想nodejs是怎么做的。
1 请登录后投票
   发表时间:2013-03-05  
sulong 写道
diggywang 写道
hello.world! 写道
sulong 写道
100个人同时在线,是不是意味着服务器上保持者100个链接呢?

看这里 http://tomcat.apache.org/tomcat-7.0-doc/config/http.html  Standard Implementation的acceptCount,maxConnections和maxThreads这三个配置项分别配置的什么,有什么区别呢?

一台机器,一秒钟处理了100个链接,每个链接的处理时间为 10ms;另一台机器一秒钟同样处理100个请求,但是每个链接的处理时间都是1秒。这两台机器在一秒时间内的并发一样吗?

一台web服务器,同时保持了100个链接,但是它所在的硬件只有一个单核cpu。在一个cpu时钟周期的时间粒度上,有多少并发呢?

你想想以上这些问题。


恩恩,你说的这些我到时没想,但是我有个问题,如果保持一个长连接,如果是5s,是不是这5s就是一个线程独占,当前线程被hold住的,就是被锁的状态。是这样吗


一般来说分两种情况,Blocking IO方式的服务器会导致一个线程独占,Non-Blocking IO不会这样,几个线程也可轻松管理数万连接。


你仔细思考我给你提出的那些问题,我想很多事情你是能想清楚的。tcp连接数和线程数之间并不存在必然的一对一关系,我想这一点你已经想明白了。

“如果保持一个长连接,如果是5s,是不是这5s就是一个线程独占,当前线程被hold住的,就是被锁的状态。”这个还是取决于程序的设计。你想想servlet 3.0 的  AsyncContext 有什么用。 跳出java的圈子,你想想nodejs是怎么做的。



恩恩,慢慢明白了~  我在看看servleet3.0,你qq多少,我加你
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics