有什么区别 - 性能方面 - 从套接字读取1个字节一次到读取大块?
我有一个C++应用程序,需要从Web服务器提取页面并逐行解析收到的页面.目前,我一次读取1个字节,直到遇到CRLF或达到最大1024字节.
如果读取大块(例如一次1024个字节)在性能方面要好得多,那么关于如何实现我目前所拥有的相同行为的任何想法(即能够一次存储和处理1个html行 - 直到CRLF还没有消耗后续的字节)?
编辑:
我买不起太大的缓冲区.由于应用程序用于嵌入式设备,因此我的代码预算非常紧张.我更喜欢只保留一个固定大小的缓冲区,最好一次只保留一个html行.这使我的解析和其他处理变得容易,因为我随时尝试访问缓冲区进行解析,我可以假设我正在处理一个完整的html行.
谢谢.
我不能评论C++,但是来自其他平台 - 是的,这可以产生很大的不同; 特别是代码需要做的交换机数量,以及需要担心流的异步性等的次数.
但真正的考验当然是对其进行分析.为什么不编写一个基本的应用程序,使用这两种方法搅拌任意文件,并测试它的一些典型文件... 如果代码是IO绑定的,效果通常是惊人的.如果文件很小并且大部分应用运行时用于处理内存中的数据,则您不太可能注意到任何差异.
如果您直接从套接字读取,而不是从可以缓冲的中间高级表示读取,那么毫无疑问,最好完全读取 1024 字节,将它们放入 RAM 的缓冲区中,然后解析 RAM 中的数据。
为什么?在套接字上读取是一个系统调用,它会导致每次读取时进行上下文切换,这是昂贵的。了解更多相关信息:IBM 技术库:提升套接字性能