关于线程并行问题

来源:11-2 多线程编程 - threading

qq_拱手河山讨欢_0

2019-03-26

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

写回答

2回答

bobby

2019-04-07

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

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

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

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

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

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

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

0
0

bobby

2019-03-27

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

0
3
qq_拱手河山讨欢_0
回复
bobby
1.python的最大问题就是一个进程中的多个cpu无法同时分配到多个cpu上. 这句话我不是很理解是什么意思? 2.既然多线程也不是一起执行。那多线程比单线程更加快的地方,其实就在于单线程需要等,而多线会在等的时间里由其他线程去执行其他操作,就相当于cpu每时每刻都在操作,所以其实多线程比单线成节约的时间就是这部分等的时间。 不知道我理解的对吗?
2019-04-04
共3条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程