鱼C论坛

 找回密码
 立即注册
查看: 2936|回复: 3

[已解决]多线程提升运行速度但是不明显

[复制链接]
发表于 2023-9-24 17:03:09 | 显示全部楼层    本楼为最佳答案   
问题分析:

根据代码,你的程序主要分为两个模块:module_1和module_2。module_1负责爬取网页并进行处理,module_2负责提取网页内容并去除相似度高的网页。

在多线程的实现中,你使用了线程池ThreadPoolExecutor来管理线程,并通过submit方法提交任务。但是你发现,多线程并没有明显提升程序的运行速度。

问题原因和解决方案:

1. IO密集型任务:根据代码,你的任务主要是请求网页并获取响应。这属于IO密集型任务,即主要消耗时间在等待网络请求的响应上。多线程并不能提供明显的性能提升,因为多线程在等待网络响应时仍然会阻塞,无法同时进行其他任务。

   解决方案:考虑使用异步编程框架,如asyncio库,结合异步的网络请求库(如aiohttp)来提高程序的性能。异步编程可以更好地利用CPU资源,在等待IO操作时可以切换到其他任务,从而提高程序的并发性能。

2. 任务调度与线程数量:你的代码中使用了48个线程进行任务的调度和执行。线程并不是越多越好,过多的线程会导致线程切换开销增加,反而降低程序的性能。

   解决方案:根据实际情况调整线程数量。可以尝试逐步增加线程数量,找到最优的线程数量。同时,可以通过合理的任务调度策略来提高程序的并发性能。

3. 其他优化措施:除了上述两点,还可以考虑以下优化措施:

   - 使用连接池:建议使用连接池来管理网络请求的连接,可以提高网络请求的效率。
   - 减少锁的使用:锁的使用会导致线程串行执行,降低并发性能。可以尝试减少锁的使用,或者使用更细粒度的锁来提高并发性能。
   - 优化算法和数据结构:对于一些耗时较长的操作,可以考虑优化算法和数据结构,减少时间复杂度,提高程序性能。

希望以上分析和解决方案对你有帮助!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
回答可能有误,多多谅解!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-3 08:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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