这是一种并发编程模式吗



一些OOP设计出现在我的脑海中。它就像一个游泳池和一个工厂。

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

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

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

我为资源定义了状态:

init某个线程试图获取SSH连接,但该连接不存在。资源创造是一个漫长的过程。如果其他线程将尝试也要获得相同的资源,则需要的资源正在进行中并且第二线程去等待通知。

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

繁忙至少有一个线程已使用SSH连接

关闭的tcp套接字被破坏

有一个资源的状态图:

  • ->init->busy->free->closed-

    空闲->繁忙

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

SSH只是一个例子。此模式适用于任何支持并行工作。当第二个线程想要获得创建资源但创建资源的第二个例子是无稽之谈。

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

正如我所了解的,您必须解决"连接池"的问题。连接池是"池模式"的实现。

与模式(我所看到的)不同的是,在您的实现中,会话的用户对连接和池化的混乱有所了解。

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

会话创建不需要与工厂一起工作。

这可能是真的,但会话的生命周期对连接的生命周期至关重要。因此,我将把创建/销毁的责任交给池,而不是使用对象。

相关内容

  • 没有找到相关文章

最新更新