从串行读取数据块是不是比一次读取 1 个字符更快?

Posted

技术标签:

【中文标题】从串行读取数据块是不是比一次读取 1 个字符更快?【英文标题】:Is reading blocks of data from serial faster than reading 1 character at a time?从串行读取数据块是否比一次读取 1 个字符更快? 【发布时间】:2013-02-11 23:36:33 【问题描述】:

从串行端口读取大块是否比一次读取 1 个字节更快?众所周知,读取块通常更快。但是,我想知道串行通信是否属于这种情况,因为:

    现代处理器速度与旧协议 与 USB 等新的通信方法不同,串行一次传输 1 位

作为后续,使用 USB 作为串行连接(使用类似 PL2303 驱动程序,如果有帮助的话)对此有何影响?

当我在考虑如何解析来自串行端口的传入消息时出现了这个问题。使用当前的设计,一次解析 1 个字符会更容易,但是,我也想高效地进行读取。

【问题讨论】:

用户态应用程序?还是内核驱动? 然后尝试读取块。每个字节一个系统调用可能是相当多的开销。 "串行一次传输一位,不像USB这样的新通信方式" -- USB也是串行的,一次传输一位。 “串行”是指 EIA/RS-232 接口吗? 是否有表明有新数据可用的事件?如果是这样,请读取所有可用字节。 【参考方案1】:

除非您直接使用串行硬件,否则我想您的操作系统会缓冲传入的数据,并且一次读取数据块仍然会更有效。

你可以两种方式都做,看看哪个更快。

鉴于 S 代表串行,USB 肯定只是一种快速串行连接。

【讨论】:

以上是关于从串行读取数据块是不是比一次读取 1 个字符更快?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 串行库处理从串口读取的原始数据?

比 Scanner 或 BufferedReader 从 STDIN 读取多行数据更快的方式?

如何从 Qt5 读取串行数据

为啥读取“从 1 个范围内读取 2972​​ 个标记”比读取“从 126 个范围内读取 238 个标记”更快

从 netCDF 更快地读取时间序列?

Java基础