并发并行与同步异步的概念;GIL锁的概念

'''
并发:是指系统具有处理多个任务(动作)的能力
并行:是指系统具有同时处理多个任务(动作)的能力
并行是并发的一个子集

同步:当进程执行到一个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就不适用了


while True: print('studying...')
原文地址:https://www.cnblogs.com/xuewei95/p/14846337.html