找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4013|回复: 3

TCP 要求数据的次序性, ACE 的多任务,多线程怎么处理?

[复制链接]
发表于 2007-12-11 22:24:18 | 显示全部楼层 |阅读模式
比如我进行文件传输时,要求数据的次序性不能乱.
情景:
客户端 A 通过服务器和客户端 B 进行文件传输.
次序描述:
1. 客户端 A 发送一个数据包和指令包到服务器.
2. 服务器端 socket A 收到数据包和指令包, 然后把数据分别推入"数据任务"和"指令任务"处理.
3. 结果"指令任务"首先把指令数据发出去了.然后"数据任务"再把数据发出去了.
4. 客户端 B 期望首先接到数据数据,然后再接到指令数据.???
当然我上面说的可能不太合理,大体上是那么一个意思.当然综合更多业务和模型,情况可能更复杂.
ACE 提倡的多任务,多线程,是怎么保证 TCP 要求的数据次序性呢?
还是 ACE 根本没有保证.
我一直对这个问题存有疑惑,欢迎大家多多讨论和指教.
 楼主| 发表于 2007-12-11 22:24:27 | 显示全部楼层
ACE保证你异步投递出去的数据,肯定是顺序的,结果和你投递的顺序一致。但是如果你把数据处理放入队列,多个线程处理队列中的数据,因为OS对线程的抢占调度,就不能保证处理顺序了。不过,仍然可以采用序号的策略来达到目标,对同一个地址的数据,用同一个处理线程处理,就OK了。
不过,我没明白你上面说的具体意思。
 楼主| 发表于 2007-12-11 22:24:35 | 显示全部楼层
非常感谢楼上的, 对于您的回答.

1.不过针对您说的哪个异步投递出去的数据,保证是次序的.是怎么样一个模型,能否举一个出来.而它又是通过什么机制进行保护的呢? ( 对于 ACE 我是新手,呵呵 )

2.您说的加序号,是需要自己做次序保护处理吧.而这要求上层的操作逻辑复杂度增加.随着不同的业务,可能难度不一.况且性能上肯定会因为业务处理用时不一,可能受到很大影响.不知道我的理解对否?望指教.

3.上面我举的例子可能不太妥当.主要意思就是想问一下, ACE 在多任务,多线程的情况下,能否保证  TCP 数据的次序性,还是由用户自己做保护.

上面的例子,主要是说明,那种情况下, TCP 的次序性,就会发生混乱
 楼主| 发表于 2007-12-11 22:24:42 | 显示全部楼层
1、ACE的Proactor框架保证。
2、也算不上难,比如你用一个Task,根据地址的不同,对同一个地址,分配到一致的子处理队列,就保证了处理的顺序。
3、ACE对同一个TCP连接,肯定是有保证的,但是因为自己使用多线程,出于线程调度引起的,需要自己保证。我的理解。
按照ACE的规则写,肯定不会混乱。这也是ACE的巨大优势。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-20 10:20 , Processed in 0.397448 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表