OkHttp3源码详解之 okhttp连接池复用机制(一,2021吊打面试官系列

在timeout空闲时间内,连接不会关闭,相同重复的request将复用原先的connection,减少握手的次数,大幅提高效率。

并非keep-alive的timeout设置时间越长,就越能提升性能。长久不关闭会造成过多的僵尸连接和泄露连接出现。

那么okttp在客户端是如果类似于客户端做到的keep-alive的机制。

2、连接池的使用

========

连接池的类位于okhttp3.ConnectionPool。我们的主旨是了解到如何在timeout时间内复用connection,并且有效的对其进行回收清理操作。

其成员变量代码片


/**

 * Background threads are used to cleanup expired connections. There will be at most a single

 * thread running per connection pool. The thread pool executor permits the pool itself to be

 * garbage collected.

   */

  private static final Executor executor = new ThreadPoolExecutor(0 /* corePoolSize */,

      Integer.MAX_VALUE /* maximumPoolSize */, 60L /* keepAliveTime */, TimeUnit.SECONDS,

      new SynchronousQueue<Runnable>(), Util.threadFactory("OkHttp ConnectionPool", true));



  /** The maximum number of idle connections for each address. */

  private final int maxIdleConnections;



  private final Deque<RealConnection> connections = new ArrayDeque<>();

  final RouteDatabase routeDatabase = new RouteDatabase();

  boolean cleanupRunning; 

excutor : 线程池,用来检测闲置socket并对其进行清理。

connections : connection缓存池。Deque是一个双端列表,支持在头尾插入元素,这里用作LIFO(后进先出)堆栈,多用于缓存数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值