‘‘‘
并发:是指系统具有处理多个任务(动作)的能力
并行:是指系统具有同时处理多个任务(动作)的能力
并行是并发的一个子集
同步:当进程执行到一个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就不适用了
原文:https://www.cnblogs.com/xuewei95/p/14846337.html