我试图并行运行两个程序。由于TCL是解释器,它将逐个处理程序。有人可以用一个例子来解释如何在TCL中使用多线程吗?
答案 0 :(得分:7)
现在,在Tcl中执行多线程的常用方法是使用它的Thread
extension - 它与Tcl的核心一起开发,但在某些平台上(例如各种基于Linux的操作系统),你可能会需要安装一个单独的软件包才能获得此扩展。
The threading model Thread
扩展实现的是“每个解释器一个线程”。这意味着,每个线程只能“托管”一个Tcl解释器(以及无限数量的子解释器),但任何线程执行的代码都不能访问其他线程中托管的解释器。反过来,这意味着当你在Tcl中使用线程时,你必须掌握多个解释器的想法。
在不同线程中运行的解释器之间交换数据的经典方法是消息传递:您将脚本发布到目标的输入队列解释器在不同的线程中运行然后等待回复。另一方面,线程共享变量(通过锁定实现共享内存)也是可用的。另一个可用功能是支持线程池。
阅读"Tcl and threads"维基页面Thread
's extension manual pages。
代码示例在wiki上。这只是one of them。
请注意,如果您认为必须并行运行的程序,主要是I / O绑定(也就是说,他们从网络读取内容和/或在那里发送内容)而不是 CPU绑定(进行大量计算),使用基于事件的处理方法可能会有更好的结果:Tcl内置了对事件循环的支持,你可以当下一个数据块可以从一个通道(如网络套接字)读取或写入一个通道时,让Tcl执行你的代码。