1

我要puts大量的数据到TCL中的一个文件,而且耗时很长。我尝试使用 将缓冲区容量从 4KB 增加到 1MB fconfigure,但没有发现任何改进。

我不确定我是否可以flush每隔一段时间缓冲一次,因为我猜测如果这样做我的一些数据会丢失。

有什么方法可以在不丢失任何数据的情况下提高看跌期权的速度吗?

4

2 回答 2

2

通常,输出速度将受到磁盘驱动器速度和计算机系统 I/O 带宽的限制。

增加缓冲区大小可能是您唯一能提供帮助的事情。

flush 会减慢写入速度,因为它会将写入缓冲区强制推送到操作系统。

如果您的传入数据流暂停或进入一个可以放入内存的大块,您可以在内部缓冲传入的数据,然后让写入赶上。

于 2015-09-09T19:58:25.153 回答
1

如果您的数据来自另一个通道(文件、套接字等),那么您可以使用fcopy它来移动它。该fcopy命令尽可能高效地工作,如果您将双方(传入和传出)配置为使用二进制数据传输——因此没有编码转换或 EOL/EOF 字符处理——那么它可以用最少的数据副本来完成;它与用户进程级系统可以复制数据一样有效(并且您必须进行黑客攻击才能将副本移动到操作系统内核中才能做得更好)。显然,必须处理行尾标记的编码转换和转换会减慢速度。

否则,主要瓶颈仍然(可能)是正在写入输出的设备。如果要写入文件,则写入 SSD 是最简单的选择(但不一定是最便宜的!)通过网络写入时,更好的网络将产生巨大的影响。您确实必须确定真正的瓶颈是什么;如果 Tcl 将大部分时间都花在等待硬件上,那么努力使 Tcl 更快就没有什么意义了,因为您几乎看不到这项工作的任何结果。修复硬件瓶颈超出了 Stack Overflow 的范围,尽管一些姊妹站点可能会提供帮助。

puts不会丢失数据,除非你做了一些非常邪恶的事情,比如kill -9对进程执行强制终止(),或者从 C 代码中对文件指针的位置进行重置。

于 2015-09-10T12:48:25.427 回答