并发和并行:
CPU和多任务的关系:
单核CPU可以执行多任务吗?
也可以执行多任务,由于CPU执行代码都是按照顺序执行,那么单核CPU如何执行多任务?就是让操作系统轮流让每个任务交替执行。运行速度很快情况下,就感觉是同时执行;
真正的并行执行只能在多核cpu上实现。但是任务远远多于CPU内核数量,所以操作系统也会自动把多任务轮流执行执行;
并发和并行:
并发:
指的是任务数多于cpu内核数,通过操作系统的各种任务调度算法,实现多个任务一起执行,(实际就是切换很快,看上去像是一起执行)
并行:
任务数小于等于cpu内核数,即任务真的一起执行;
同步和异步:
同步(同步协调):
是指线程访问某个资源时,获得了资源的返回结果之后才会执行其它操作,(先做一件事,再做某件事)
异步:
与同步相对,是指线程访问某个资源时,无论是否取得返回结果,都进行下一步操作,当有了资源返回结果时,系统自动通知线程;
先来看两个任务执行单线程过程;
import time
from threading import Thread
def warpper(func):
def count_time():
start_time = time.time()
func()
end_time=time.time()
print('函数运行时间是:{:.5f}'.format(end_time-start_time))
return count_time
def work1():
for i in range(6):
time.sleep(1)
print('----work1--------')
def work2():
for i in range(5):
time.sleep(1)
print('----work2--------')
@warpper
def main():
work1()
work2()
main()
运行结果:
----work1--------
----work1--------
----work1--------
----work1--------
----work1--------
----work1--------
----work2--------
----work2--------
----work2--------
----work2--------
----work2--------
函数运行时间是:11.00377
由上线运行结果基本就是两个任务原本执行时间相加的结果;
下一节我们再对比一下多线程执行过程;