关于多线程的疑惑

关于多线程的疑惑

老师,您好!学完多线程之后我还是非常疑惑。之前我用python进行读取文件时,文件非常大,然后有人给我说用多线程可以进行处理,之后工作中也遇到过需要提高处理速度的,也是被告诉从多线程方面下手,但是我看完对多线程的介绍,还是非常迷惑,就处理非常大的文件来说,提高速度如何使用多线程?老师能不能讲解一下?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕阿园 2020-06-07 16:43:25

同学你好,靠cpu调度执行时间是指CPU对于各个线程的调度是随机的,所以不会一直执行完毕

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


好帮手慕阿园 2020-06-07 10:28:41

同学你好 
1,多线程不是为了多个线程去抢占运行机会来提高效率;而是为了在同一时间内多个线程同时处理文件来达到效率的提高
2,我们可以让一个线程必须执行完毕来保证文件的有序完整。一个线程在运行过程中如果没有被打断,是靠cpu调度执行时间,不会一直执行到完毕
3,单核CPU上运行的多线程程序, 同一时间只能一个线程在跑, 系统帮你切换线程而已, 系统给每个线程分配时间片来执行, 每个时间片大概10ms左右, 看起来像是同时跑, 但实际上是每个线程跑一点点就换到其它线程继续跑,效率不会有提高的;切换线程反倒会增加开销,所以在单核CPU的情况下,不推荐使用多线程

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


  • 提问者 mahsiaoko #1
    第2点靠cpu调度执行时间,不会一直执行到完毕这个我该怎么理解?
    2020-06-07 13:09:19
好帮手慕阿慧 2020-06-06 18:52:13

同学你好,可以开启多个线程,将文件分段处理,每个线程处理一段文件。

基本思路如下:

1. 计算出文件总大小

2. 分段处理,计算出每个线程读取文件的开始与结束位置

  (文件大小/线程数)*N,N是指第几个线程,这样能得到每个线程在读该文件的大概起始位置

使用"大概起始位置",作为读文件的开始偏移量(fileChannel.position("大概起始位置")),来读取该文件,直到读到第一个换行符,记录下这个换行符的位置,作为该线程的准确起 始位置.同时它也是上一个线程的结束位置。最后一个线程的结束位置也直接设置为-1

3. 启动线程,每个线程从开始位置读取到结束位置为止。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 mahsiaoko #1
    分成多个线程进行处理的话,是为了多个线程同时去抢占运行的机会,从而提升读取效率吗?还有,如果一个线程在运行过程中,如果没有被打断(没有被其他线程join,也没有自己sleep和wait),会一直执行到完成吗?那如果是单核cpu的话,使用多线程会提升速度吗?
    2020-06-06 19:11:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师