有什么区别 – 性能方面 – 从套接字读取1个字节一次到读取大块?
我有一个C应用程序需要从Web服务器提取页面并逐行解析收到的页面.目前,我一次读取1个字节,直到遇到CRLF或达到最大1024字节.
如果读取大块(例如一次1024个字节)在性能方面要好得多,那么关于如何实现我目前所拥有的相同行为的任何想法(即能够一次存储和处理1个html行 – 直到CRLF还没有消耗后续的字节)?
编辑:
我买不起太大的缓冲区.由于应用程序用于嵌入式设备,因此我的代码预算非常紧张.我更喜欢只保留一个固定大小的缓冲区,最好一次只保留一个html行.这使我的解析和其他处理变得容易,因为我随时尝试访问缓冲区进行解析,我可以假设我正在处理一个完整的html行.
谢谢.
解决方法
如果你是直接从套接字读取,而不是从可以缓冲的中间高级表示中读取,那么毫无疑问,最好完全读取1024个字节,将它们放入缓冲区的RAM中,然后解析RAM中的数据.
为什么?读取套接字是系统调用,它会在每次读取时引起上下文切换,这很昂贵.了解更多信息:IBM Tech Lib: Boost socket performances