自己管理socket缓冲的疑问

sssxueren 2003-12-19 06:22:45
偶然听说,如果将socket的snd、rcv缓冲设置为0,系统将直接使用程序分配的内存来发送和接受数据,省却一个memcpy的工作量,但是,系统会自动锁定该段内存的分页。

这个锁定的分页大小是多少呢?如果我使用多个小缓存recv,如果锁定分页过大,不是对性能有负面影响吗?

winsock内核机制是怎样的呢?一次只可能有一个IO操作吗?也就是说,即使多个端口recv,一次也只锁定一块内存,那样的话,即使系统自动锁定我的内存分页,也没关系的吧

希望可以和大家讨论一下,谢谢!
...全文
27 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sssxueren 2003-12-21
  • 打赏
  • 举报
回复
各位大侠帮帮忙,就是顶顶也好啊~~~~```` :)

我想,高效的服务器端,还是自己来管理缓冲的好吧,大家一起来讨论一下啊
sssxueren 2003-12-21
  • 打赏
  • 举报
回复
还是没人做过这些吗?对了,我又想到一点,我怎么能保证我分配的4kb内存正好是一页呢?也就是我希望系统锁定的话,只锁定那一块内存,而不影响其它的线程
sssxueren 2003-12-20
  • 打赏
  • 举报
回复
我现在使用的是多个小缓冲,就是一个缓冲recv完,马上就换下一个,然后这个recv完的缓冲就开始处理,不需要memcpy,如果只是设定系统缓冲的话,好像不能这样吧
warmchang 2003-12-20
  • 打赏
  • 举报
回复
缓冲区可以自己设定撒!
sssxueren 2003-12-20
  • 打赏
  • 举报
回复
没人回答吗?
sssxueren 2003-12-19
  • 打赏
  • 举报
回复
我希望将系统缓冲区设置为0。自己来处理缓冲

就是说一次锁定的内存区域至少是4K?那么如果我实际使用到的recv缓存只有不到2K的话,那2K数据后面的内存区域也全部都不能访问了?
xiaohyy 2003-12-19
  • 打赏
  • 举报
回复
我的理解是:

1 系统锁定的分页大小应该是程序分配缓冲区的大小。而且是4k的倍数。
2 每个socket对应一个系统缓冲区(如果没有设置为0的话)
sssxueren 2003-12-19
  • 打赏
  • 举报
回复
我现在的模型是完成端口的,有一套自己的缓冲管理代码,想直接使用自己的缓冲来提升性能,不知道需要注意那些地方,看到了一些文章,有些疑问,所以希望和大家讨论一下,回帖有分,谢谢!

18,355

社区成员

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

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