socket内部有自己得缓存,一般得发送的过程都有数据拷贝,如何为socket指定内存?

xl5338870 2006-09-04 02:36:14
socket内部有自己得缓存,一般得发送的过程都有数据拷贝,如何为socket指定内存?
...全文
704 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xl5338870 2006-09-04
  • 打赏
  • 举报
回复
发送内存分配器:分配和回收发送的内存。
发送对列:存放所有需要发送的缓存信息。

伪代码:

SendingProc() {
...
while (从发送队列中中取发送缓存,队列空则block自己) {
设置发送socket的发送缓存(这个不知道如何做)
测试socket发送有效条件并开始发送
}
}
shefg_great 2006-09-04
  • 打赏
  • 举报
回复
我现在是这么考虑的,做一个内存分配器,管理所有发送的缓存,设置一个发送队列,
然后发送的时候依次从队列中取出缓存来发送,这么做是不是可以?

这么做是可以的,而且效果不错,有人已经实现你的这种思想了,可以在程序员沙龙下载别人的实现代码。程序员沙龙地址是:http://www.pudn.com/
晨星 2006-09-04
  • 打赏
  • 举报
回复
这个就不太清楚了,帮你顶一下吧。
Tananbaum的《Computer Networks》一书中也提到过这个问题,不管是TCP/IP协议栈,还是ISO协议栈,协议的各个层之间不断的数据拷贝的确能引发效率问题。
但常常这也没办法。比如底层在组包时,总不好包含一个指针,那样反而也会影响发送效率,而且大大增加协议的实现难度和对上层程序设计者的要求。
xl5338870 2006-09-04
  • 打赏
  • 举报
回复
IOCP一般是处理tcp的。我用udp包。

我现在是这么考虑的,做一个内存分配器,管理所有发送的缓存,设置一个发送队列,
然后发送的时候依次从队列中取出缓存来发送,这么做是不是可以?

请高手指教。
晨星 2006-09-04
  • 打赏
  • 举报
回复
所谓“导致性能影响呢”,我的理解是一旦没有底层缓冲,就必须同步发送,数据没真正发出去函数就绝不退出。
——本来把数据交给底层的网络服务组件就可以了,它自然会尽快发出去,你的程序可以去干别的事了。
baojian88888 2006-09-04
  • 打赏
  • 举报
回复
使用完成例程或完成端口
晨星 2006-09-04
  • 打赏
  • 举报
回复
这是两个层次的问题吧。
一般你的数据缓冲可能很快会释放到,而如果发送时底层采用的是异步机制,那岂不是会有问题?
xl5338870 2006-09-04
  • 打赏
  • 举报
回复
自己指定缓冲区不是可以减少一次数据拷贝的过程吗?
这样为什么还会导致性能影响呢?
DentistryDoctor 2006-09-04
  • 打赏
  • 举报
回复
设置发送缓冲区大小零,这样就可以直接你给的缓冲区了。但性能上会有影响,一般不建议这么做。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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