我脑子里出现了一些OOP设计。它就像一个游泳池和一个工厂。
工厂创建可在多个线程之间共享的资源。 一个资源实体很昂贵,而且它的创建需要很多时间。 一次可以由多个线程使用资源。
在我的特定情况下,资源是SSH连接。 SSH连接使用一个TCP套接字。 但是一个SSH连接可以有多个会话。 每个线程为自己创建新会话。 会话创建不需要与工厂合作。
多个线程可以尝试与同一个远程主机进行交互。
我定义了资源的状态:
init某个线程试图获得SSH连接,但它不存在。 有一个漫长的资源创造过程。如果另一个线程会尝试 为了获得相同的资源,它可以获得所需的资源 第二个线程去等待通知。
free所有会话都关闭,没有线程使用SSH连接
忙于至少一个线程已经接受了SSH连接
关闭tcp套接字被破坏
有一个资源的状态图:
- > init - >忙 - >免费 - >关闭
免费 - >忙
我读过有关OOP模式,企业应用程序模式,并发模式的书籍 但我不记得上面描述过的情况。
SSH就是一个例子。此模式适用于任何支持的重型资源 并发工作。当第二个线程想要创建资源但创建时 第二个资源实例是废话。
如果是模式,那么他的名字是什么? 我相信这个设计已经在某处描述过了。
答案 0 :(得分:0)
当我得到它时,你必须解决连接池的问题"。 连接池是"池模式的实现"。
与模式(我看到的)的不同之处在于,在您的实现中,会话的用户知道关于连接和池化的修改的事情。
对我来说,有一种更多的模式方式"似乎,如果用户从会话池中订购会话并将其返回给它。因此,池化系统知道是否需要连接,并且创建/销毁机制对用户是透明的。 用户获得"连接"因为他有一个会议。
创建会话并不需要与工厂合作。
这可能是真的,但会话的生命周期对于连接的生命周期至关重要。所以我将负责创建/销毁池而不是使用对象。