加快将操作提交到tcl中的文件

加快将操作提交到tcl中的文件,tcl,buffer,flush,puts,Tcl,Buffer,Flush,Puts,我必须将大量数据放入TCL中的一个文件中,这需要很长时间。我尝试使用fconfigure将缓冲区容量从4KB增加到1MB,但没有发现任何改进 我不确定我是否可以每隔一段时间刷新我的缓冲区,因为我猜测如果这样做,我的一些数据会丢失 有什么方法可以在不丢失任何数据的情况下提高PUT的速度吗?通常,输出速度会受到磁盘驱动器速度和计算机系统I/o带宽的限制 增加缓冲区大小可能是唯一可以帮助您的方法 flush将减慢写入速度,因为它将强制将写入缓冲区推送到操作系统 如果传入的数据流暂停或出现在一个可以放入

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

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


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

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

增加缓冲区大小可能是唯一可以帮助您的方法

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


如果传入的数据流暂停或出现在一个可以放入内存的大数据块中,您可以在内部缓冲传入的数据,稍后再写入。

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

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

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