#同步阻塞:调用函数必须等待结果,并且cpu不工作,比如:input sleep recv accept connect (应该是针对当前进程)
#同步非阻塞:调用函数必须等待结果,但是cpu工作,比如:strip eval sum max min sorted strip在处理字符串 cpu工作
#异步阻塞:电泳函数不需要立即获取结果,而是继续做其他的事,在获取结果的时候不知道先获取谁的,但总之需要等待
#异步非阻塞:调用函数不需要立即获取结果,也不需要等待 start() terminate()
#总结
#进程:数据隔离,资源分配的最小单位,可以利用多核,操作系统调度
#multiprocessing 如何开启进程 start join
#进程数据不安全问题 Lock
#守护进程 daemon属性
#进程之间通信IPC
#队列,管道 ,第三方工具
#进程之间可以通过Manager类实现数据共享
#生产者消费者模型
#一般开启的进程数不会超过cpu个数的两倍
#线程:能被CPU调度的最小单位 ,学了半天 关于并发需求进程还没线程重要?
#一个进程里可能有多个线程,而且可以同时被多核处理器调度执行
#不是资源分配的最小单位,是操作系统调度的最小单位
#也存在数据不安全
#但是可以数据共享
#进程的开启和关闭 时间开销大 线程的小
#【重要】在CPython中的多线程
#gc 垃圾回收机制 线程
#引用计数+分代回收
#全局解释器锁:为了完成gc的回收机制,对不同线程的引用计数的变化记录的更加精准
#GIL(global interpreter Lock)
#导致同一个进程中的多个线程在同一时刻只能有一个线程被cpu执行
import time
#装饰器计算各个功能时间
def use_time(f): #闭包
def inner(*args,**kwargs):
time1 = time.time()
f(*args,**kwargs)
time2 = time.time()
print(f'{f}耗时{time2-time1}')
return inner
@use_time
def calc():#计算加法
for i in range(100000):
i+=1
@use_time
def open_file():#打开文件,写文字进去
with open('aa.info','w') as f1:
f1.write('a')
if __name__ == '__main__':
calc() #耗时0.038024187088012695
open_file() #耗时0.006002902984619141