python复习(三)

单例模式的应用场景

单例模式应用的场景一般发现在以后条件下:
  1.资源共享的情况下,避免由于资源操作时导致的性能或损耗等,如日志文件,应用配置
  2.控制资源的情况下,方便资源之间的互相通信。如进程池等。
 网站的计数器、应用配置、多线程池、数据库配置、数据库连接池、应用程序的日志应用

闭包

在函数的内部嵌套了一个函数,内函数使用了外函数的局部变量,并且外函数返回了内函数的引用,这样就构成了一个闭包

def outfunc(a,b):
 def innerfunc(x):
  return x*a+b
 return innerfunc

装饰器的本质-闭包

装饰器的作用:在不违反开放封闭的原则下对现有的函数进行功能的扩充,比如插入日志,性能测试,事物处理、缓存、权限的校验等场景,有了装饰器就可以抽离出大量的与函数功能本身无关的雷同代码

死锁

若干子线程在系统资源竞争是,都在等待对方对某部分资源解除占用状态,结果是谁也不愿先解锁,导致程序无法执行下去,这就是死锁

GIL全局解释器锁(cpython):限制多线程同事执行,保证同一时刻只有一个线程执行,所以cpython里的多线程其实是伪多线程!所以python里常常使用协诚技术来代替多线程,协诚是一种更轻量级的线程,进程和线程的切换时由系统决定,而协诚由我们程序员自己决定,模式gevent下的切换时遇到了耗时操作才会切换

三者之间的关系:进程里有线程,线程里有协诚

同步,异步,阻塞,非阻塞

同步:多个任务之间有先后顺序执行,一个执行完成后下个才能执行
异步:多个任务之间没有先后顺序,可以同时进行
阻塞:卡住调用者,调用者不能继续往下执行
非阻塞:调用者不会卡住,可以继续执行,就是非阻塞的

同步和异步是相对于多任务而言,阻塞和非阻塞是相对于代码执行而言

python中进程和线程的使用场景

多进程适合在cpu密集型操作(cpu操作指令表多,如位数多的浮点运算)
多线程适合在IO密集型操作(读写数据操作比较多,比如爬虫、网络编程)

线程池的优点

1.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁时造成的消耗
2.提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行
3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控

多线程、线程池能够实现并发吗

由于cpython中GIL的限制,同一时刻只有一个线程被执行,而且不能利用cpu多核的特性,线程执行时,会为当前线程上锁,其他线程等待,遇到以下两种情况会释放锁,去执行其他线程任务1.线程遇到阻塞情况2.调用了time.sleep() 并不是真的并发执行,只是速度太快,看上去像并发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值