解决pip安装慢
Python方法和装饰器
Python方法和装饰器
[TOC]
前言
装饰器真的很重要,再怎么强调都不为过。
装饰器
装饰器本质上就是一个函数,这个函数接收其他函数作为参数,并将其以一个新的修改后的函数进行替换。
关键就是修改这块,可以做一些通用处理,以扩大原函数的功能。感觉有点类似java中的切片。
装饰是为函数和类指定管理代码的一种方式。装饰器本身的形式是处理其他的可调用对象的可调用对象(如函数)。
装饰器提供了一种方法,在函数和类定义语句的末尾插入自动运行代码。
通过针对随后的调用安装包装器对象可以实现:
- 函数装饰器安装包装器对象,以在需要的时候拦截随后的函数调用并处理它们。
- 类装饰器安装包装器对象,以在需要的时候拦截随后的实例创建调用并处理它们。
docker 基础命令
操作系统换之并发这点事儿
[TOC]
并发
桌子上有很多桃子,每个人看到桃子去抓取。这就是并发,他存在的问题是 不同的人会尝试去抓同一个桃子。这么导致后面的人抓不到。
可能的解决办法是大家排队一次拿桃子,这样又会降低效率。
如何又快又不出错的拿桃子,这就是问题所在。实际上,并发比这个更复杂。
线程
进程只有一个指令执行路径,也就是只有一个pc计数器。
线程的引入 增加了指令执行路径。每个线程有自己的指令执行路径,即PC计数器,也有自己独立的寄存器。
但是这些线程又共享地址空间,从而共享代码和数据。
类似于进程间的切换有上下文切换,线程间切换也有上下文切换。
进程是把状态保存到进程控制块 (Process Control Block, PCB)。
线程是把状态保存到线程控制块(Thread Control Block, TCB)。需要注意的是,同一个进程的线程间 本身是共享地址空间的,所以不需要切换当前使用的页表。
因为每个线程都有独立的栈,多线程的引入还影响了地址空间布局。有的应用程序会利用这个特性,譬如Java有ThtreadLocal, 在线程栈里存变量。
线程和进程一样,并不是创建了就马上运行,而是会由操作系统调度。