开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 261|回复: 9
收起左侧

[已解决] 问一个多线程思路的问题

 关闭 [复制链接]

结帖率:99% (99/100)
发表于 昨天 16:59 | 显示全部楼层 |阅读模式   黑龙江省大庆市
20精币
333.png 222.png 111.png 我现在所有功能 获取 删除 下载 都用的 线程池_内容, 像我现在有9个功能 说说 日志等,  比如相册就是删除 下载, 那我应该每个功能都单独用一个线程池还是  改成线程池_下载、删除、上传、获取 这种,还是说我每个功能都单独用一个线程池  有什么好的建议吗

最佳答案

查看完整内容

不要按“功能(说说/日志)”分,而是按“操作类型”来分。 建议只建立 2 个全局线程池: 逻辑/API 线程池(用于:获取列表、删除、发表、留言等)。速度快、流量小、主要是HTTP请求,线程数可以设置很大,因为这些操作瞬间就完成了。避免操作排队。 文件传输 线程池(用于:下载相片、下载视频、上传文件)。这些速度慢、占用带宽大、耗时长。线程需要严格控制(例如 5-10),防止占满用户宽带导致软件假死或网络超时。 ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值
结帖率:100% (3/3)

签到天数: 9 天

发表于 昨天 16:59 | 显示全部楼层   重庆市重庆市
不要按“功能(说说/日志)”分,而是按“操作类型”来分。

建议只建立 2 个全局线程池:
逻辑/API 线程池(用于:获取列表、删除、发表、留言等)。速度快、流量小、主要是HTTP请求,线程数可以设置很大,因为这些操作瞬间就完成了。避免操作排队。
文件传输 线程池(用于:下载相片、下载视频、上传文件)。这些速度慢、占用带宽大、耗时长。线程需要严格控制(例如 5-10),防止占满用户宽带导致软件假死或网络超时。
回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 8 天

发表于 昨天 17:03 | 显示全部楼层   广东省湛江市
建一个线程池,然后往里面投递任务即可,
回复

使用道具 举报

结帖率:99% (99/100)

签到天数: 8 天

 楼主| 发表于 昨天 17:47 | 显示全部楼层   黑龙江省大庆市
z573277679 发表于 2026-2-8 17:18
不要按“功能(说说/日志)”分,而是按“操作类型”来分。

建议只建立 2 个全局线程池:

2个线程池 感觉会有干扰
回复

使用道具 举报

结帖率:100% (3/3)

签到天数: 9 天

发表于 昨天 17:54 | 显示全部楼层   重庆市重庆市
这是最科学的架构。只要做好两点:尽量让下载线程只处理下载变量,逻辑线程只处理逻辑变量。如果它们都要写同一个日志文件,记得加个 线程许可证
回复

使用道具 举报

结帖率:99% (99/100)

签到天数: 8 天

 楼主| 发表于 昨天 17:56 | 显示全部楼层   黑龙江省大庆市
z573277679 发表于 2026-2-8 17:54
这是最科学的架构。只要做好两点:尽量让下载线程只处理下载变量,逻辑线程只处理逻辑变量。如果它们都要写 ...

方便联系方式私信一下吗
回复

使用道具 举报

结帖率:100% (3/3)

签到天数: 8 天

发表于 昨天 18:50 | 显示全部楼层   河北省邯郸市
你必须得自己明白为什么用到线程池,当然可以每个功能都创建一个线程池,只要同时在执行的线程数不超过你的逻辑核心数就行了,线程池的初衷是为了把多个线程统一调配,节省资源
回复

使用道具 举报

结帖率:100% (3/3)

签到天数: 8 天

发表于 昨天 19:02 | 显示全部楼层   韩国
[C] 纯文本查看 复制代码
关于线程池的组织方式,我建议根据**任务类型**而不是功能模块来划分,原因如下:

## 推荐方案:按任务类型划分线程池

```
线程池_IO密集型  // 下载、上传、网络请求
线程池_CPU密集型 // 图片处理、数据解析
线程池_数据库    // 数据库读写操作
```

### 为什么这样划分?

**1. 资源利用更高效**
- IO密集型任务(下载/上传)等待时间多,可以设置较多线程
- CPU密集型任务需要计算,线程数接近CPU核心数即可
- 避免资源浪费和过度竞争

**2. 更容易调优**
- 统一调整同类任务的线程池参数
- 例如所有下载任务都共享一个优化好的配置

**3. 避免线程爆炸**
- 9个功能如果各自3个线程池 = 27个线程池,管理复杂
- 按类型划分只需要3-4个线程池

## 不推荐的方案

❌ **每个功能独立线程池**(线程池_相册、线程池_日志...)
- 资源碎片化严重
- 当某功能空闲时,线程池浪费

❌ **单一全局线程池**
- 不同类型任务混在一起,难以优化
- IO任务可能阻塞CPU任务

## 实际配置建议

```java
// IO密集型:下载、上传、网络获取
ThreadPoolExecutor ioPool = new ThreadPoolExecutor(
    20, 50, 60L, TimeUnit.SECONDS,
    new LinkedBlockingQueue<>(100)
);

// CPU密集型:图片压缩、数据处理
ThreadPoolExecutor cpuPool = new ThreadPoolExecutor(
    Runtime.getRuntime().availableProcessors(),
    Runtime.getRuntime().availableProcessors() * 2,
    60L, TimeUnit.SECONDS,
    new LinkedBlockingQueue<>(50)
);

// 数据库操作
ThreadPoolExecutor dbPool = new ThreadPoolExecutor(
    5, 10, 60L, TimeUnit.SECONDS,
    new LinkedBlockingQueue<>(200)
);
```

这样既保证了性能,又便于维护和监控。你觉得这个方案适合你的场景吗?
回复

使用道具 举报

结帖率:98% (44/45)

签到天数: 8 天

发表于 昨天 19:18 | 显示全部楼层   浙江省湖州市
如果你将所有功能混用一个线程池 某个功能的大量任务可能会阻塞其他功能 建议按操作类型(获取 删除 下载
)来划分线程池 而不是按功能模块划分  
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 8 天

发表于 昨天 22:37 | 显示全部楼层   江西省九江市
不建议为每个功能单独一个线程池,更推荐按操作类型或任务性质划分
避免过度拆分,如果9个功能各自独立线程池,会导致线程池过多、资源碎片化,增加管理复杂度,也容易出现有些池空闲、有些池排队的情况。
可以改成这种形式:
线程池_网络下载(用于所有功能的下载)
线程池_数据库写(用于删除、更新)
线程池_上传处理
线程池_通用cha询(用于获取内容)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表