Multithreading 要使用多线程,命令模式比装饰器模式更有用吗?

Multithreading 要使用多线程,命令模式比装饰器模式更有用吗?,multithreading,design-patterns,decorator,command-pattern,Multithreading,Design Patterns,Decorator,Command Pattern,通过了解在以前的项目中是如何使用的,我可以理解它在多线程(并行)编程中是如何有用的,因为命令可以在不同的线程中执行。当需要在命令之间传递数据时,数据可以存储在共享内存中,指向该数据的指针(或句柄)可以传递给不同线程上的调用程序 然而,Decorator模式似乎有一个限制,即所有事情都必须发生在单个线程上,因为Decorator必须直接调用委托,这意味着它们必须在同一个线程上 我对这个限制的理解正确吗?相反,是否可以在多个线程上运行decorator 我试图实现的是一个处理数据流的管道 要实现

通过了解在以前的项目中是如何使用的,我可以理解它在多线程(并行)编程中是如何有用的,因为命令可以在不同的线程中执行。当需要在命令之间传递数据时,数据可以存储在共享内存中,指向该数据的指针(或句柄)可以传递给不同线程上的调用程序

然而,Decorator模式似乎有一个限制,即所有事情都必须发生在单个线程上,因为Decorator必须直接调用委托,这意味着它们必须在同一个线程上

我对这个限制的理解正确吗?相反,是否可以在多个线程上运行decorator


我试图实现的是一个处理数据流的管道

  • 要实现为命令模式,其
    execute
    方法将采用两个参数:输入缓冲区和输出缓冲区
  • 要实现为Decorator模式,其
    getdata
    方法将调用其委托以获取上一步的结果,应用其自己的处理,并将结果返回给调用者
然而,当我在两种风格中都实现了它之后,我发现每种风格都有一些我原本不清楚的局限性

  • 当使用命令模式时,我可以通过使用一个新的缓冲区开始接受更多的输入数据,而以前的缓冲区由一些在单独的工作线程中运行的命令进行处理。我似乎不能用装饰图案来做这件事
  • 当使用Decorator模式时,Decorator可以对其委托进行任意数量的调用,并且能够将结果组合成一个块。它还可以通过发出一个大请求、缓存数据,然后返回数据片段来拆分数据。当我使用带有一个输入缓冲区和一个输出缓冲区的命令模式时,结果不能有任何组合或分割

是否可以在任何线程上运行装饰程序由实现定义:)

如果你的装饰是线程安全的。。。对如果不是:添加同步。这可能会影响你的表现

然而,在我看来,对于装饰者来说,大部分时间都忙于装饰的对象是很有意义的,而且只有少量的上下文/状态。显然,这里要修饰的对象首先应该是线程安全的(或感知的),否则即使没有修饰器,它也会有同样的问题

也许这就是你所说的“轻量级”装饰器。如果你的装饰师是重量级的(因为他们“利用世界”来完成他们的工作),那么肯定需要同步。这甚至可能导致性能瓶颈


但是从根本上说,没有什么可以阻止(通常)在您想要的任何线程上执行decorator。

是否可以在任何线程上运行decorator是由实现定义的:)

如果你的装饰是线程安全的。。。对如果不是:添加同步。这可能会影响你的表现

然而,在我看来,对于装饰者来说,大部分时间都忙于装饰的对象是很有意义的,而且只有少量的上下文/状态。显然,这里要修饰的对象首先应该是线程安全的(或感知的),否则即使没有修饰器,它也会有同样的问题

也许这就是你所说的“轻量级”装饰器。如果你的装饰师是重量级的(因为他们“利用世界”来完成他们的工作),那么肯定需要同步。这甚至可能导致性能瓶颈


但是从根本上说,没有什么可以阻止(通常)在任何线程上执行装饰程序。

。我没有看到装饰器和线程之间的联系。在我看来,这些是正交的概念。如何“调用”或“执行”装饰器?通过将对象包装到同步方法中,decorator可以使任何类线程安全。在任何情况下,模式的有用性都过于主观,无法在这里得到答案。@sehe:有些框架中,大部分处理是由装饰程序执行的,通过对其委托返回的数据执行额外的处理。我知道decorator(如最初所述)应该是轻量级的(它们为用户提供了良好的语法),所以重量级的decorator可能不应该是decorator?sehe是正确的。该模式的存在是为了扩展现有对象的行为。时期decorator不提供“良好的语法”,它应该向用户提供透明的语法。“轻量级”和“重量级”不相关。多线程是否合适取决于进程,而不是模式。如果流程适合多部分执行,通常是异步执行。机器翻译是有用的。如果没有,MT就没有用处。Decorator模式并不意味着这个过程的任何内容,只是它可以被扩展。我没有看到装饰器和线程之间的联系。在我看来,这些是正交的概念。如何“调用”或“执行”装饰器?通过将对象包装到同步方法中,decorator可以使任何类线程安全。在任何情况下,模式的有用性都过于主观,无法在这里得到答案。@sehe:有些框架中,大部分处理是由装饰程序执行的,通过对其委托返回的数据执行额外的处理。我知道decorator(如最初所述)应该是轻量级的(它们为用户提供了良好的语法),所以重量级的decorator可能不应该是decorator?sehe是正确的。该模式的存在是为了扩展现有对象的行为。时期decorator不提供“良好的语法”,它应该向t提供透明的语法