工作者线程具有持久状态:当你开始工作线程,工人可用于执行,直到变量超出范围或工人处于停机状态。
举一个脚本示例,该脚本可以从多个来源联机下载多个页面:在很小的范围内,您可能会摆脱困境,它可能是拥有多个线程的最佳设计,每个线程处理单个请求并处理内容。但是,通常情况下,开始一个线程发出一个请求或者执行任何非常简单的操作,您应该认为这是一项巨大的浪费,相反,您可以启动尽可能多的工作人员,因为您的硬件和环境可以管理,并实现请求和处理内容作为一个Stackable。使用Worker时,每个请求不会花费您对线程上下文的初始化。在这种情况下的持久性是指每个Stackables可以读取$ this-> worker,并访问所有/任何全局(包括类级静态变量)作用域,因此从Stackable的角度来看,在执行期间工人坚持,实际上Stackables只是共享一个上下文。
互斥和电导率是有铁杆POSIX线程成瘾者,以及并行线程本身的发展过程中我的目的。普通用户不应该真的需要使用这个功能,尽管它与对应的posix函数一样都有文档记录,并且大部分原始文档仍然适用(顶层有一层明智的文档)。 Mutex和Cond都是熟悉功能的精简包装,并不是真正针对Joe Bloggs。
我想如果互斥体,以便有安全的阅读和对象的写作需要你想知道,这是不是这样,安全性被内置到并行线程。
你应该使用一个工作线程的时间将是;从这个例子来看,它的规模很小。此外,如果您有硬件来支持它,线程可以创建工人(和线程),这可以为更复杂的系统设计提供可能性。在这种情况下,你也可能会变得很棒,在这种情况下,你可以将你的线程编程为像工作人员一样工作,而不需要为每个任务开始对象初始化(堆栈)。 Worker是一个线程,只有Thread的某些功能被用来执行一个Stackables的列表,你会注意到Thread和Worker的同步方法的细微差别,如果你按照预期使用工作者,这并不重要。但是,如果您的真棒导致您认为避免使用标准模型会更好,那么您将需要来自Thread对象的同步来实现PHP中的Worker模式。
事实是,如果你正在寻找线程,你一次只想做两到三件事情,那么你很可能会找到办法做一些事情。因此,提供Worker/Stackable功能作为pthreads包的一部分是有意义的,因为它更适合在不同的上下文中执行一堆事情,所以在PHP中编写这些东西(即使在pthread的帮助下)也是非常棘手的。
谢谢!这是一个巨大的帮助。尽管我的代码正在工作,但我的方式并不顺利。我仍然想知道什么时候可以使用纯色的Thread对象。 – marlonp33
好的,我更新了线索上的一些关于...的信息,希望能够完全回答你的问题。 –
我不得不多次阅读这些内容才能理解你的意思。但是谢谢! – Nerrve