当前位置:  开发笔记 > 编程语言 > 正文

一个大字节缓冲区还是几个小缓冲区?

如何解决《一个大字节缓冲区还是几个小缓冲区?》经验,为你挑选了1个好方法。

我正在学习C#异步套接字编程,并且我已经了解到在某种池中重用字节缓冲区是个好主意,然后在从套接字接收数据时根据需要检查一个.

但是,我已经看到了两种不同的字节数组池方法:一种是使用简单的队列系统,只是根据需要在队列中添加/删除它们.如果请求了一个并且队列中没有剩余,则会创建一个新的字节数组.

我见过的另一种方法是为整个程序使用一个大字节数组.队列的概念仍然适用,但它是一个整数队列,它确定要使用的字节数组的片(偏移量).如果请求了一个并且队列中没有剩余,则必须调整阵列的大小.

对于高度可扩展的服务器,哪一个是更好的解决方案?我的直觉是,使用多个字节数组会更便宜,因为我想要根据需要调整数组大小(即使我们在大块中分配它)也会非常昂贵,特别是当它变大时.使用多个阵列似乎也更直观 - 使用一个我没想到的大型阵列有一些优势吗?



1> Szymon Rozga..:

你的直觉是正确的.每次需要使数组变大时,您将重新创建数组并复制现有的字节.由于我们在这里讨论字节,因此数组的大小可能会很快变大.因此,每次都会要求连续的内存,这取决于程序使用内存的方式,可能会也可能不会存在.这也将成为一个虚拟池,可以这么说.根据定义,池具有一组由多个客户端管理和共享的多个项目.

一个阵列解决方案实现起来也更复杂.好消息是,一个阵列解决方案允许您提供可变大小的块,但这是以实际上重新实现malloc为代价的:处理碎片等等,这是您不应该进入的.

多阵列解决方案允许您使用N个缓冲区初始化池,并以简单的方式轻松管理它们.绝对是我推荐的方法.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有