找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4184|回复: 4

请问什么叫分散读取集中写入?

[复制链接]
发表于 2007-12-22 21:37:47 | 显示全部楼层 |阅读模式
ACE_SOCK_Stream的方法中
send()
recv()
send_n()
recv_n()
recvv_n()
sendv_n()的区别是什么,第一组各用于什么样的情况?
而最后一组recvv_n()和sendv_n(),书中谈到分散读取集中写入,又是什么含义?
请指教,谢谢
 楼主| 发表于 2007-12-22 21:37:52 | 显示全部楼层
就是方便你按结构一次性发送数据。windows 的socket实现,其实就是从头到尾,把数据复制到缓冲区发送,和普通调用完全一样。只不过这样调用在有些时候很方便。
 楼主| 发表于 2007-12-22 21:38:00 | 显示全部楼层
分散读取操作可在单个调用中将一个字节序列读入一个或多个给定的缓冲区序列。分散读取通常在实现网络协议或文件格式时很有用,例如将数据分组放入段中(这些段由一个或多个长度固定的头,后跟长度可变的正文组成)。

集中写入能减少写入的操作的调用并能有效的利用i/o 的buffer,对性能有好处.
 楼主| 发表于 2007-12-22 21:38:08 | 显示全部楼层
定义消息的时候,常常这样定义(不是所有的哦)

消息类型[4]+消息长度[4]+payload[n]

while(!done())

{

   你先读4字节,获得消息的类型

   再读4字节,获得消息的长度 n

   再读n字节,获取消息的有效载荷

}
 楼主| 发表于 2007-12-22 21:38:18 | 显示全部楼层
还是底层自动分拆。Windows源码里面很清楚。没什么特别的。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-23 18:52 , Processed in 0.015358 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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