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