它是并发编程的模式吗?

时间:2012-10-10 06:27:12

标签: design-patterns concurrent-programming

我脑子里出现了一些OOP设计。它就像一个游泳池和一个工厂。

工厂创建可在多个线程之间共享的资源。 一个资源实体很昂贵,而且它的创建需要很多时间。 一次可以由多个线程使用资源。

在我的特定情况下,资源是SSH连接。 SSH连接使用一个TCP套接字。 但是一个SSH连接可以有多个会话。 每个线程为自己创建新会话。 会话创建不需要与工厂合作。

多个线程可以尝试与同一个远程主机进行交互。

我定义了资源的状态:

init某个线程试图获得SSH连接,但它不存在。       有一个漫长的资源创造过程。如果另一个线程会尝试       为了获得相同的资源,它可以获得所需的资源       第二个线程去等待通知。

free所有会话都关闭,没有线程使用SSH连接

忙于至少一个线程已经接受了SSH连接

关闭tcp套接字被破坏

有一个资源的状态图:

  • - > init - >忙 - >免费 - >关闭

    免费 - >忙

我读过有关OOP模式,企业应用程序模式,并发模式的书籍 但我不记得上面描述过的情况。

SSH就是一个例子。此模式适用于任何支持的重型资源 并发工作。当第二个线程想要创建资源但创建时 第二个资源实例是废话。

如果是模式,那么他的名字是什么? 我相信这个设计已经在某处描述过了。

1 个答案:

答案 0 :(得分:0)

当我得到它时,你必须解决连接池的问题"。 连接池是"池模式的实现"。

与模式(我看到的)的不同之处在于,在您的实现中,会话的用户知道关于连接和池化的修改的事情。

对我来说,有一种更多的模式方式"似乎,如果用户从会话池中订购会话并将其返回给它。因此,池化系统知道是否需要连接,并且创建/销毁机制对用户是透明的。 用户获得"连接"因为他有一个会议。

  

创建会话并不需要与工厂合作。

这可能是真的,但会话的生命周期对于连接的生命周期至关重要。所以我将负责创建/销毁池而不是使用对象。