# Socket并发连接阻塞图片加载如何解决

#### 问题现象

并发多个Socket连接请求时，设置连接超时时间为6秒，同时使用ImageKnife加载图片，当Socket连接超时时会阻塞图片加载，需等待超时时间结束后图片才能展示。

#### 背景知识

Socket连接相关接口可参考使用Socket访问网络文档。ImageKnife是一个开源图片加载库，用于在应用中加载和缓存图片。

#### 问题定位

1.  应用启动时同时发起多个Socket并发连接请求和ImageKnife图片加载请求。
2.  当Socket连接目标不可达时，连接会等待至超时时间（如6秒）结束。
3.  在超时等待期间，Socket连接占用了系统网络资源，导致ImageKnife的图片加载请求被阻塞。
4.  超时时间结束后，被阻塞的图片加载请求才得以执行，图片才能展示。

#### 分析结论

系统侧对Socket并发连接的资源调度存在限制，底层网络请求采用排队机制处理，当多个Socket连接同时等待超时时，会占满网络请求队列的可用槽位，导致其他网络请求（如图片加载）无法及时获得调度资源而被阻塞，最终导致图片加载延迟。

#### 修改建议

升级系统版本验证。

升级至最新版本后，应用发起多个Socket并发连接不可达目标时，应用不会阻塞，图片加载可正常执行。请升级后验证当前效果是否符合诉求。

当前版本的临时规避方案：

在升级系统版本前，开发者可通过以下方式缓解问题：

1.  限制Socket并发连接数量：控制同时发起的Socket连接数，避免占满系统网络请求队列，建议并发数不超过5个。
2.  使用队列管理请求：将Socket连接请求放入队列中串行或分批执行，避免大量连接同时等待超时。
3.  错峰发起请求：将Socket连接请求与图片加载请求错开时间发起，优先执行图片加载请求，待图片加载完成后再发起Socket连接，或分时段交替执行。