本节内容
1、引子
2、并发多线程效果演示
一、引子
我们说单核的cpu只能同时执行一个任务,但是给我们的一个幻觉是可以执行多个,因为cpu太快了。它是怎么实现的呢?就是上下文切换,它不是轮询着切换的。它是按照优先级来切换的,并不是从头到尾的,中间的切换是有优先级的。我们就可以利用这个优势,因为它太快了,但是我们只打开了一个QQ,启动一个线程的话,他能得到执行的时间就是有限的。那cpu给我们的感觉同时执行多个任务,那我就可以并发批量操作某个动作。
二、并发多线程效果演示
2.1、创建线程
说明:我们通过threading.Thread模块去创建线程
1
2
3
4
5
6
7
8
9
10
|
import threading def run(n): print ( "task:" ,n) t1 = threading.Thread(target = run,args = ( "t1" ,)) #args后面1个参数也要加逗号,要不然会把它当做一个参数,实际它是一个元组 t2 = threading.Thread(target = run,args = ( "t2" ,)) t1.start() #启动线程 t2.start() |
那有的同学就说了,你这样达到并发的效果了,压根就没看出来啊,跟我下面这种情况有什么区别呐?请看如下代码:
1
2
3
4
5
|
def run(n): print ( "task:" ,n) run( "t1" ) run( "t2" ) |
没有错,是没有看出什么来,那我们就来改进一下,加一个时间模块(time),再来看看效果。
2.2、验证并发效果
说明:我们来添加一个时间模块,再来看看效果
1
2
3
4
5
6
7
8
9
10
11
|
import threading,time def run(n): print ( "task:" ,n) time.sleep( 2 ) t1 = threading.Thread(target = run,args = ( "t1" ,)) t2 = threading.Thread(target = run,args = ( "t2" ,)) t1.start() t2.start() |
第二种代码改写如下:
1
2
3
4
5
6
7
8
|
import time def run(n): print ( "task:" ,n) time.sleep( 2 ) run( "t1" ) run( "t2" ) |
通过实验:很明显第一种情况实现并发效果,一个等待了2秒中就结束了,因为并发,两个线程同时等待了2秒,但是第二种情况有间隔。