关于一个server对应大量client通讯的效率的问题(100分)

  • 主题发起人 一个过客
  • 开始时间
>>在多线程的方式下遍历时间是非常短的
为什么?有证据吗?我不觉得这是个浅显的道理,正相反,我觉得多线程对遍历没有什么
影响。当然,除非分段遍历会有效果。
 
想问一句,在问出问题时,你有没有实际测试过? 或者说你对自己问道的问题了不了解其工作原理?

为什么在多线程下遍历不会有什么影响, 第一本身在 Windows 2000 下,一个进程最多也只能狗
创建 2 千 零 10 多个线程. 第二在为每个用户连接创建一个线程来维护其连接时,这个时候你
所作的遍历过程中, 其每个工作线程的动作不会影响主线程的正常运行(除非崩溃), 而我们所做
的遍历操作也是主线程中执行,想想吧. 就这么两个理由,其实第一个理由是废话
 
你看三层控件(ASTA,KBMMW)的源码,看它们是怎么作的.
 
蚊哥:我理解能力差,没看懂您的意思。您是不是让我给每个用户开一个线程?
哪如果有1000格用户,会不会太站资源?
 
我觉得好象股票应用是用组播的,
最近我也研究类似方面的,
我觉得好象组播可以啊
 
我测试的结果是组播也不能跨网段啊!只能在同一个局域网内。

你有成功组播并且跨网短的例子吗?最简单的就行。不过我觉得我的代码应该没问题。
因为在局域网内已经成功了,但是互联网上不行
 
组播能不能跨子网是由路由器设置是否转发广播数据包决定的,
不幸的是,现在internet上大多数路由器都设置成不转发,所以广播数据包就在路由器上
被丢弃了.
 
qq用的不是组播吗?
 
QQ的所谓组播估计就是遍历完成的
这个我跟曹晓钢讨论过,他说开到1000个线程的时候,在线程切换上的开销
就会比线程本身的开销还大
所以我觉得你还是老老实实遍历吧,其实也不会太慢的
 
当线程开的很多的情况下,系统的开销并不小,如果要用多线程来做,线程开的个数不能太多
我看10个就够了。否则延迟更大。
 
我一直都很奇怪,有人说在一台 Windows 服务器上,才用阻塞和多线程方式,可以处理几万个
并发用户连接,有那位高人知道是怎么实现的吗?
 
文哥: 我估计那人不是高手,是大款,买了个好机器。
 
使用多播技术吧

如下是一篇文章

在城域网/Internet中,采用单播方式将相同的数据包发送给网络中的多个而不是全部接收者时,由于需要复制分组给每一个接收端点,随着接收者数量的增多,需要发出的包数也会线形增加,这使得发送主机、路由设备及带宽资源总体负担很重,效率受到极大影响。随着多点电视会议、群组通信应用等需求的增长,为提高资源利用率,多播方式日益成为多点通信中普遍采用的传输方式。

多播技术主要由控制用户加入/离开多播组的IGMP协议和构造路由器间多播路径的多播路由协议来支持实现。

IGMP(Internet组管理)协议

IGMP协议是一种注册协议,主要完成多播用户组的管理。利用IGMP协议,主机与直接连接的路由器打交道,通知路由器主机希望加入或离开哪一个多播组。

利用IGMP协议,多播路由器可以判断出在它所直接相连的网段中是否存在多播组的成员。如果存在多播组成员,多播路由器就可以向上级多播路由器发送消息,申请加入一个多播组,并将上级多播路由器发送过来的多播数据包转发给多播成员主机。IGMP目前最新的协议为版本2,该协议在RFC2236中有具体说明。

多播路由协议

多播路由协议用于实现多播路由器之间的多播路由信息传递,目前主要有两大类的多播路由协议。

1. 密集模式

适合小规模的网络,例如城域IP网络。密集模式首先假定网络中的每一个路由器都想接收多播数据包,一个发自多播源的数据包会被转发到多播路由器所有的下游接口上,直到某个下游接口被剪枝出多播组。目前密集模式协议主要有DVMRP、PIM-DM等。

2. 稀疏模式

适合于大型网络,例如Internet网络。与密集模式不同,稀疏模式是根据下游路由器发来的加入消息来判断是否将多播数据包发送给下游路由器的。只有下游路由器(叶子路由器)通过IGMP协议检测到它所直连的主机中有某个多播组成员存在的情况下,才会向上游路由器发出加入消息,这样,上游路由器才将数据包向下游路由器进行转发。目前稀疏模式协议主要有PIM-SM。

多播技术是根据路由器下游是否有多播成员来决定是否转发数据包的,这样,支持多播协议的网络,由于只在路由有分支的节点复制数据包,与传统单播协议在源端复制后再一一发送出去的方式比较,不但大大节省了带宽资源,还减轻了源端及中间路由器节点处理重复分组的负担,缩短了通信所需的处理时间,大大提高了网络处理效率。
 
我觉得要看,客户请求的数据量的大小和客户需要数据通讯的时间而定,采用不同的策略。
如果每个客户对应一个Thread,为什么不用ThreadPool(线程池)解决问题???
 
To zhtx:你有kbmMW的源码吗?我下载的需要解压密码(0.93c),可是我不知道,用RAR Password Cracker
也没有办法解开,你能告诉我吗?
 
CODEHUNTER : 老兄,你没看上面的讨论吗?组播(多播)不能跨网段。
快乐: 线程池怎么用? 该不会让我用MTS吧? 我不想用这个东西,效率跟不上我的要求。
 
呵呵,只要你的并发连接是长连接,那在 Windows 下,还是最多只能够负载 2000多个并发用户
线程池的含义就是保存创建的线程,然后再不断的进行根据连接和断开连接来激活和挂起线程
,而不需要重新创建和销毁线程,这种方式只适合短时间连接处理,如果用户是长时间保持连接
那还是无法同时响应大量的连接用户,不知道有什么好主意?
 
用重叠I/O很容易达到一个SERVER带3000多个CLIENT
 
>>用重叠I/O很容易达到一个SERVER带3000多个CLIENT

详细说说!!
 

Similar threads

S
回复
0
查看
747
SUNSTONE的Delphi笔记
S
S
回复
0
查看
696
SUNSTONE的Delphi笔记
S
D
回复
0
查看
792
DelphiTeacher的专栏
D
D
回复
0
查看
747
DelphiTeacher的专栏
D
顶部