12. Object Pool模式

场景

一台机器有20个对外的TCP/IP端口,当请求超过20个时,多余的请求就会等待,直到有空缺的端口出现。当一个端口出现故障的时候,自动切换到一个新的端口,没有端口空闲则等待。

经验丰富的王叔叔面对这样的需求,想也没想就给出了答案。

“建立一个端口池,对所有的端口进行管理,每个端口都是一个对象。这样就不存在对象被销毁和创建的代价了。”

“同时,我们还要做好对象的分发工作,避免因为资源竞争而导致死锁。”

总结

意图:在创建对象比较昂贵,对象数量有限制,需要管理对象的重用。
实现:如果可以创建的对象数量有限,或者池的大小有限制,可以使用一个数组来实现。如果只有一个,就可以结合singleton模式来实现。
带来的问题:

  1. 因为资源竞争而导致死锁
  2. 创建和销毁对象的代价是不是大于对象池的维护。

你可能感兴趣的:(12. Object Pool模式)