tpool用于加速计算

时间:2017-06-02 17:12:47

标签: multithreading tcl

我尝试使用tpool来加速某些文件夹中大小在30到300 MiB之间的任何文件的shasum计算。 我在macOS Sierra 10.12.5上使用自制软件中的tcl-tk版本8.6.6(tcl-tk OS X版本是8.5.9,结果相同但是以错误终止)。 我可以理解命令“brew info tcl-tk”的结果,使用选项编译tcl: - 附线程     “使用多线程支持构建”

没有线程使用,很明显CPU负载(Activity Monitor)不是很忙。 使用tpool的线程,而不是更多,计算一组shasum文件的时间花费全局相同。

根据-maxworkers数量,perl5.18进程的全局%CPU(shasum是Perl脚本)是相同的。一切都发生好像所有同时工作的线程都在同一个处理器核心上运行。

根据Donald Fellows answer中的示例,参见下面的主要脚本:

#!/bin/sh
# -*- tcl -*-
# The next line is executed by /bin/sh, but not tcl \
exec /usr/local/Cellar/tcl-tk/bin/tclsh "$0" ${1+"$@"}

package require Thread

set pool [tpool::create -maxworkers 16 -initcmd {
    source myProcedures.tcl
}]

proc TREE_parse_big_files {path} {
    foreach f [ glob -nocomplain ${path}/* ] {
        puts "Parsing ${f}"

        if { [ file type ${f} ] == "link" } { return }

        if { [ file isdirectory ${f} ] } {
            TREE_parse_big_files ${f}
        } else {
            tpool::post $::pool [list computeSHA ${f}]
        }
    }
}

TREE_parse_big_files  “/tmp/BigFiles” $pool

# Dispose of the pool
tpool::release $pool

文件myProcedures.tcl包含:

proc computeSHA {bigFile} {
    puts [eval exec shasum -a 256 -b {$bigFile}]
}

有什么我不理解的吗?

0 个答案:

没有答案