2012-11-18 97 views
1

我试图并行运行两个程序。由于TCL是口译员,它将逐一处理程序。有人可以用一个例子解释我如何在TCL中使用多线程?如何在TCL中使用多线程?

+0

这个问题要求[this obligatory reference](http://whathaveyoutried.com) – kostix

回答

7

这些天,通常的方式做多线程在Tcl是利用其Thread extension —它正在与Tcl的核心而发展起来的,但在某些平台上(如各种基于Linux的操作系统),您可能需要安装一个单独的包来获得这个扩展可用。

The threading modelThread扩展实现是“每个解释器一个线程”。这意味着,每个线程只能“托管”一个Tcl解释器(以及它的子解释器的数量不限),但任何线程都不能执行的代码可以访问其他线程中托管的解释器。这反过来又意味着当你在Tcl中使用线程时,你必须掌握多个解释器的思想。

的经典方法在不同的线程运行的解释器之间的数据交换是消息传递:您发布脚本在不同的线程上运行的目标解释的输入队列然后等待回复。另一方面,线程共享变量(通过锁定实现共享内存)也可用。另一个可用功能是支持线程池。

阅读"Tcl and threads" wiki页面,Thread's extension manual pages

代码示例位于wiki上。这里只是one of them

请注意,如果你的程序,你认为哪,有parrallel中运行,大多是I/O密集型(也就是说,他们从网络上读到的东西和/或送东西有),而不是受CPU限制的(执行繁重的计算)时,使用基于事件的方法进行处理可能会获得更好的结果:Tcl内置了对事件循环的支持,并且您可以在下一个块时使Tcl执行您的代码的数据可以从通道(如网络套接字)读取或写入通道。

+2

线程扩展附带8.6 –

+0

哇,这样一个古老的语言,它有一个多线程的解释器! :-)有了它,它淹没了php,perl5,ruby和python。 :-) – peterh

+0

@peterh,花边使得语言看起来只有10年左右的古老:BCPL从1966年开始,而LISP(Tcl类似于基本上没有语法和嵌套括号)从1958年开始(参见[this]( https://softwareengineering.stackexchange.com/a/188463)以获取更多信息)。但我们离题... – kostix