''' 并发:是指系统具有处理多个任务(动作)的能力 并行:是指系统具有同时处理多个任务(动作)的能力 并行是并发的一个子集 同步:当进程执行到一个IO(等待外部数据)的时候,需要等;这就叫同步;比如recv,accept 异步:当进程执行到一个IO(等待外部数据)的时候,不需要等;一直等到数据接收成功,再回来处理;这就叫异步 ''' import threading import time # def music(one, two): # print('begin to listen music %s %s' % (one, two)) # time.sleep(3) # print('stop to listen musci and 子线程一ending...') # # def game(): # print('begin to play game') # time.sleep(5) # print('stop to play game and 子线程二ending...') # # if __name__ == '__main__': # t1 = threading.Thread(target=music, args=(10, 20,)) # t2 = threading.Thread(target=game) # # t1.start() # t2.start() # # print('主线程ending...') # 多线程---利用cpu的并发来实现多任务的处理,提高效率 start = time.time() def sum(): num = 0 for i in range(1000001): num += i print('sum:', num) def mul(): num = 1 for i in range(1, 100000): num *= i print('mul:', num) l = [] t1 = threading.Thread(target=sum) t2 = threading.Thread(target=mul) l.append(t1) l.append(t2) # for t in l: # t.start() # # for i in l: # i.join() sum() mul() print('运行时间为:%s' % (time.time() - start)) # 在python3中开启线程执行比串行执行稍微快,这是因为做了优化;而在python2中开启线程执行比串行执行慢,这是因为本身两个线程之间就是不断的在进行切换让cpu执行; # python的GIL,意思就是说每一个进程都有一把GIL锁,也就是cpu只执行一个进程,然后进程间每个线程不断切换让cpu执行,大量的切换也需要消耗时间; # GIL:全局解释锁,因为有GIL,所以同一时刻,只有一个线程被CPU执行 # 任务:IO密集型,计算密集型 # 对于IO密集型的任务:python的多线程是有意义的,也可以采用多进程+协程 # 对于计算密集型的任务:python的多线程就不推荐,python就不适用了