请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于线程并行问题

图片描述
老师在代码中讲到,因为线程并行问题,所以运行时间为0,但是在GIL中讲到同一时间只有一个线程会被cpu执行,那这里的线程并行为什么能实现那。

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

2回答

bobby 2019-04-07 11:27:07

我在这里回复吧,这里文本格式化效果好:

1. python的最大问题就是一个进程中的多个cpu无法同时分配到多个cpu上.  这句话我不是很理解是什么意思?

这句话的意思其实已经说明白了,你的理解大致也是对的,但是如果用java的话,多个线程可以同时分配到多个cpu上运行的

2. 既然多线程无法同时分配到多个cpu上执行,name多线程的优势在哪里呢

这里你的理解大致是没问题的,也就是对一个web系统来说,io的时间占比是远远高于cpu时间的,所以如果在cpu运行的时候io操作可以同时进行这样当一个线程切换出去以后,这个程序中的io操作部分是可以同时执行的,所以这里的重要点有两个:

    1. io操作时间远远高于cpu时间

    2. io操作和cpu操作可以同时进行,这个时候当一个线程被切换出去以后这个线程的io操作仍然是可以继续执行的

0 回复 有任何疑惑可以回复我~
bobby 2019-03-27 17:11:12

1. 首先last_time为0不是因为并行的问题,而是thread1和thread2是两个并行的线程,但是程序会自动启动一个主线程,主线程负责启动两个线程,启动后继续往下执行,如果想打印时间需要等到两个线程执行完以后打印执行时间,gil的问题确实是一个时间只有一个线程会被cpu执行,所以从cpu的角度来看确实是串行的,但是因为gil会释放,所以当遇到io的时候gil会切换 这个时候当前线程的io是继续执行的

0 回复 有任何疑惑可以回复我~
  • 我理解的意思是: python中的多线程并行运行,其实并不是真正意思上的一起执行。其实还是有个先后顺序的,只是在执行A线程需要等待的时候,GIL锁释放B线程在运行。 不知道我理解的对吗?
    回复 有任何疑惑可以回复我~ 2019-04-01 13:53:57
  • bobby 回复 提问者 qq_拱手河山讨欢_0 #2
    在单cpu的情况先,所有语言的多线程都是不是一起执行的,只有多cpu才会存在同时执行的可能,python的最大问题就是一个进程中的多个cpu无法同时分配到多个cpu上
    回复 有任何疑惑可以回复我~ 2019-04-03 16:40:09
  • 提问者 qq_拱手河山讨欢_0 回复 bobby #3
    1.python的最大问题就是一个进程中的多个cpu无法同时分配到多个cpu上.  这句话我不是很理解是什么意思?
    
    2.既然多线程也不是一起执行。那多线程比单线程更加快的地方,其实就在于单线程需要等,而多线会在等的时间里由其他线程去执行其他操作,就相当于cpu每时每刻都在操作,所以其实多线程比单线成节约的时间就是这部分等的时间。  不知道我理解的对吗?
    回复 有任何疑惑可以回复我~ 2019-04-04 09:13:27
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信