服务器的多线程的服务机制

wensheng_zh2007 2009-11-09 11:42:45
类似QQ这样的服务器,如何同时为那么多的客户端提供服务。

服务器是如何启动多线程的,启动的这些多线程是如何分配给这么多客户端服务的。
...全文
303 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lang0728 2011-10-10
  • 打赏
  • 举报
回复
学习了
do_fork 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 daidodo 的回复:]
引用 15 楼 do_fork 的回复:
引用 14 楼 daidodo 的回复:
引用 11 楼 do_fork 的回复:
  引用 10 楼 daidodo 的回复:
  引用 9 楼 do_fork 的回复:
    处理QQ登陆就有几万台了,加上互娱的N台服务器


    何以知之?


  随便找个参加过R线入职培训的人问问就知道了

  问过了,回复:“不可信”


真问了?  问的是R线员工?

我听即通的经理亲口说的,
当时还有人提问,跟skype只花了50多台机器,解决3000万在线用户问题做了对比。

放心,身边还是能找到几个腾讯人的。

[/Quote]

我估计你问的那个人,他自己都不知道,在凭想象说话
深圳电信IDC,整个一层楼全是QQ的服务器,天津西安北京也都有机房
超过10G的独享带宽,每天的带宽费用都过万了
上次西安机房的主机爬虫爬的太猛,让某网站很怒,他们以为百度在搞鬼,谁也没想到qq在西安还有机房
  • 打赏
  • 举报
回复
[Quote=引用楼主 wensheng_zh2007 的回复:]
类似QQ这样的服务器,如何同时为那么多的客户端提供服务。

服务器是如何启动多线程的,启动的这些多线程是如何分配给这么多客户端服务的。
[/Quote]

连接池,数据库还有缓存,涉及到太多东西了,内存管理,各种算法。

3000万连接瓶颈问题,楼上是在说ice么?
daidodo 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 do_fork 的回复:]
引用 14 楼 daidodo 的回复:
引用 11 楼 do_fork 的回复:
引用 10 楼 daidodo 的回复:
引用 9 楼 do_fork 的回复:
处理QQ登陆就有几万台了,加上互娱的N台服务器


何以知之?


随便找个参加过R线入职培训的人问问就知道了

问过了,回复:“不可信”


真问了? 问的是R线员工?

我听即通的经理亲口说的,
当时还有人提问,跟skype只花了50多台机器,解决3000万在线用户问题做了对比。
[/Quote]
放心,身边还是能找到几个腾讯人的。

[Quote=引用楼主 wensheng_zh2007 的回复:]
类似QQ这样的服务器,如何同时为那么多的客户端提供服务。

服务器是如何启动多线程的,启动的这些多线程是如何分配给这么多客户端服务的。
[/Quote]
对于底层的后台服务器来说,一般只区分2种类型的服务:tcp和udp。比如维护qq的在线状态,是udp服务器;而修改个人信息,访问的是tcp服务器。
从架构上来讲,udp服务器简单得多,服务的客户端数量也大的得多;
而tcp服务器,必须采用非阻塞socket,用epoll实现(ET模式),并且精巧的设计架构、流程,才能达到不错的并发量。
当然,真正提供服务的只是若干个线程,所以有可能一个服务器“进程”既可以处理tcp请求, 也可以处理udp请求。

为大量“客户端提供服务”的服务器,有协议、架构、是否分布式结构等区别,甚至采用多线程或多进程,也不一定。
当然我个人是认为多线程服务器在多CPU系统里能达到最好的效果,但不排除有牛人能优化内核、编写nb多进程架构的可能性。

“如何启动多线程”:只是简单的函数掉用。

“这些多线程是如何分配给这么多客户端服务的”:可以用超市的收银员做比喻:虽然顾客很多,但是同时进行付账动作的,只有少数。对服务器来说,大部分客户端都在等待,可能是IO,或数据库,或其他事件;而真正需要马上处理的客户端,总是少数。
daidodo 2009-11-12
  • 打赏
  • 举报
回复
口水战,没兴趣。。。
evansun922 2009-11-11
  • 打赏
  • 举报
回复
这个是个很复杂的体系,先从简单的服务器模型练起吧。
do_fork 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 daidodo 的回复:]
引用 9 楼 do_fork 的回复:
处理QQ登陆就有几万台了,加上互娱的N台服务器


何以知之?
[/Quote]

随便找个参加过R线入职培训的人问问就知道了
wensheng_zh2007 2009-11-11
  • 打赏
  • 举报
回复
感谢楼上的解释
daidodo 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 do_fork 的回复:]
处理QQ登陆就有几万台了,加上互娱的N台服务器
[/Quote]

何以知之?
do_fork 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 daidodo 的回复:]
引用 3 楼 do_fork 的回复:
QQ有N(N>=10)万台服务器,不是几百台

这个有点夸张。。。
[/Quote]

处理QQ登陆就有几万台了,加上互娱的N台服务器
daidodo 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 do_fork 的回复:]
QQ有N(N>=10)万台服务器,不是几百台
[/Quote]
这个有点夸张。。。
do_fork 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 daidodo 的回复:]
引用 11 楼 do_fork 的回复:
引用 10 楼 daidodo 的回复:
引用 9 楼 do_fork 的回复:
  处理QQ登陆就有几万台了,加上互娱的N台服务器


  何以知之?


随便找个参加过R线入职培训的人问问就知道了

问过了,回复:“不可信”
[/Quote]

真问了? 问的是R线员工?

我听即通的经理亲口说的,
当时还有人提问,跟skype只花了50多台机器,解决3000万在线用户问题做了对比。
daidodo 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 do_fork 的回复:]
引用 10 楼 daidodo 的回复:
引用 9 楼 do_fork 的回复:
  处理QQ登陆就有几万台了,加上互娱的N台服务器


何以知之?


随便找个参加过R线入职培训的人问问就知道了
[/Quote]
问过了,回复:“不可信”
sharkhuang 2009-11-11
  • 打赏
  • 举报
回复
cluster
cattycat 2009-11-10
  • 打赏
  • 举报
回复
qq服务器是linux,多台服务器集群处理,每台开辟大量的线程池进行请求处理,采用的是事件模型,具体是epoll,像上面说的处理大量连接的C10k问题。像百度,腾讯等服务器一般都是linux,自己定制内核,使性能最优。技术很复杂的,你搞清楚了,离大牛也不远了。
xingzhe2001 2009-11-10
  • 打赏
  • 举报
回复
听说qq对服务器的操作系统作了特别的优化
do_fork 2009-11-09
  • 打赏
  • 举报
回复
lz可以搜索下 c10k问题
do_fork 2009-11-09
  • 打赏
  • 举报
回复
QQ有N(N>=10)万台服务器,不是几百台
wang_wuhui 2009-11-09
  • 打赏
  • 举报
回复
服务器开着监听,只要有客户端请求连接就生成一个SOCKET线程处理吧.
jackyjkchen 2009-11-09
  • 打赏
  • 举报
回复
大型服务器肯定是链接池,保持N个并发连接不动,来了连接请求就用其中一个链接来响应

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧