一些面向对象的设计出现在我的脑海中。它就像一个游泳池和一个工厂。
工厂创建可以在多个线程之间共享的资源。一个资源实体很昂贵,并且它的创建需要很多时间。一个资源可以同时被多个线程使用。
在我的特定情况下,资源是 SSH 连接。SSH 连接使用一个 TCP 套接字。但是一个 SSH 连接可以有多个会话。每个线程都为自己创建新会话。会话创建不需要与工厂一起工作。
多个线程可以尝试与同一个远程主机进行交互。
我为资源定义了状态:
初始化一些线程试图获得 SSH 连接,但它不存在。资源创造的过程很漫长。如果另一个线程也将尝试获取相同的资源,它会得到所需的资源正在进行中,并且第二个线程去等待通知。
free 所有会话都关闭并且没有线程使用 SSH 连接
忙 至少一个线程已经建立了 SSH 连接
关闭的 tcp 套接字被破坏
有一个资源的状态图:
-> 初始化 -> 忙碌 -> 空闲 -> 关闭
空闲->忙
我阅读了有关 OOP 模式、企业应用程序模式、并发模式的书籍,但我不记得我上面描述的情况。
SSH 只是一个例子。这种模式适用于任何支持并发工作的繁重资源。当第二个线程想要创建资源但创建资源的第二个实例是无意义的。
如果是图案,那他叫什么名字?我相信这个设计已经在某个地方描述过了。