peakzhang 发表于 2007-12-22 21:37:47

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

ACE_SOCK_Stream的方法中
send()
recv()
send_n()
recv_n()
recvv_n()
sendv_n()的区别是什么,第一组各用于什么样的情况?
而最后一组recvv_n()和sendv_n(),书中谈到分散读取集中写入,又是什么含义?
请指教,谢谢

peakzhang 发表于 2007-12-22 21:37:52

就是方便你按结构一次性发送数据。windows 的socket实现,其实就是从头到尾,把数据复制到缓冲区发送,和普通调用完全一样。只不过这样调用在有些时候很方便。

peakzhang 发表于 2007-12-22 21:38:00

分散读取操作可在单个调用中将一个字节序列读入一个或多个给定的缓冲区序列。分散读取通常在实现网络协议或文件格式时很有用,例如将数据分组放入段中(这些段由一个或多个长度固定的头,后跟长度可变的正文组成)。

集中写入能减少写入的操作的调用并能有效的利用i/o 的buffer,对性能有好处.

peakzhang 发表于 2007-12-22 21:38:08

定义消息的时候,常常这样定义(不是所有的哦)

消息类型+消息长度+payload

while(!done())

{

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

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

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

}

peakzhang 发表于 2007-12-22 21:38:18

还是底层自动分拆。Windows源码里面很清楚。没什么特别的。
页: [1]
查看完整版本: 请问什么叫分散读取集中写入?