bjmayor 发布于 2022-02-25

Python 多版本共存之pyenv

[TOC]

Python 多版本共存之pyenv

前言

经常遇到这样的情况:

  • 系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性;
  • 系统自带的 Python 是 2.x,自己需要 Python 3.x;
    此时需要在系统中安装多个 Python,但又不能影响系统自带的 Python,即需要实现 Python 的多版本共存。pyenv 就是这样一个 Python 版本管理器。

阅读全文 »

bjmayor 发布于 2022-02-25

解决pip安装慢

[TOC]

解决pip安装慢

解决pip安装慢
在学习Python的过程中,发现pip安装慢,经常timeout,因为国外镜像太慢了。

网上找了下解决方案。有两个。都是使用国内镜像。

阅读全文 »

bjmayor 发布于 2022-02-21

Python方法和装饰器

Python方法和装饰器
[TOC]

前言

装饰器真的很重要,再怎么强调都不为过。

装饰器

装饰器本质上就是一个函数,这个函数接收其他函数作为参数,并将其以一个新的修改后的函数进行替换。
关键就是修改这块,可以做一些通用处理,以扩大原函数的功能。感觉有点类似java中的切片。

装饰是为函数和类指定管理代码的一种方式。装饰器本身的形式是处理其他的可调用对象的可调用对象(如函数)。
装饰器提供了一种方法,在函数和类定义语句的末尾插入自动运行代码。

通过针对随后的调用安装包装器对象可以实现:

  1. 函数装饰器安装包装器对象,以在需要的时候拦截随后的函数调用并处理它们。
  2. 类装饰器安装包装器对象,以在需要的时候拦截随后的实例创建调用并处理它们。

阅读全文 »

bjmayor 发布于 2022-02-11

docker 基础命令

[TOC]

工作中用的比较多的命令。

docker

run

systemctl start docker #启动 systemctl daemon-reload #守护进程重启 systemctl restart docker / service docker restart #重启docker服务 docker service docker stop / docker systemctl stop docker #关闭

阅读全文 »

bjmayor 发布于 2022-02-10

操作系统换之并发这点事儿

[TOC]

并发

桌子上有很多桃子,每个人看到桃子去抓取。这就是并发,他存在的问题是 不同的人会尝试去抓同一个桃子。这么导致后面的人抓不到。

可能的解决办法是大家排队一次拿桃子,这样又会降低效率。

如何又快又不出错的拿桃子,这就是问题所在。实际上,并发比这个更复杂。

线程

进程只有一个指令执行路径,也就是只有一个pc计数器。

线程的引入 增加了指令执行路径。每个线程有自己的指令执行路径,即PC计数器,也有自己独立的寄存器。

但是这些线程又共享地址空间,从而共享代码和数据。

类似于进程间的切换有上下文切换,线程间切换也有上下文切换。

进程是把状态保存到进程控制块 (Process Control Block, PCB)。

线程是把状态保存到线程控制块(Thread Control Block, TCB)。需要注意的是,同一个进程的线程间 本身是共享地址空间的,所以不需要切换当前使用的页表。

因为每个线程都有独立的栈,多线程的引入还影响了地址空间布局。有的应用程序会利用这个特性,譬如Java有ThtreadLocal, 在线程栈里存变量。

线程和进程一样,并不是创建了就马上运行,而是会由操作系统调度。

阅读全文 »

bjmayor 发布于 2022-01-24

操作系统之内存这点事儿

[TOC]

内存介绍

虚拟化内存

设计目标

目标:

  1. 透明, 这里指运行的程序感知不到内存被虚拟化的事实,相反,程序的行为就好像它拥有自己的私有物理内存。
  2. 效率 这里依赖硬件。譬如TLB, 主要消耗是虚拟地址转为实际物理地址。
  3. 保护 即程序不能访问它的地址空间之外的任何内容。从而也实现了隔离。

阅读全文 »