Linux 下 Python 多版本共存与管理 - pyenv 使用
在服务器上安装和使用各种工具的时候常常会需要使用高版本的 python,而 yum 一类系统软件又依赖于 python2,因此直接全局安装高版本的 python 会引发一些错误,但是又不想修改 yum 的相关代码... 而且常常也会出现不同的工具依赖的版本不同,在使用的时候需要频繁切换。
本文简单记录一下 python 版本管理工具 pyenv 的安装和使用。
在服务器上安装和使用各种工具的时候常常会需要使用高版本的 python,而 yum 一类系统软件又依赖于 python2,因此直接全局安装高版本的 python 会引发一些错误,但是又不想修改 yum 的相关代码... 而且常常也会出现不同的工具依赖的版本不同,在使用的时候需要频繁切换。
本文简单记录一下 python 版本管理工具 pyenv 的安装和使用。
前几天和朋友一起讨论 C 的结构体,一时兴起问了朋友几个问题,大致是关于结构体成员声明顺序对结构体大小的影响;之后想起 bit-field 的声明方式便加入了 bit-field 的情况一起讨论,而此后的实验结果在我们的电脑上得出的结果却并不一致,于是我开始翻阅起了 C 标准原文说明,尝试找到最权威的说法...
AE 事件库是 Redis 用来处理 IO 事件的库,根据系统的不同选用尽可能高效率的 IO 实现,在 ae.c
中使用条件编译根据系统支持的多路复用器(multiplexing)来选用相应的文件,其按优先级排序为:
ae_evport.c
ae_epoll.c
ae_kqueue.c
ae_select.c
在各个源文件中实现了 ae 库基本操作的统一接口,使得实际的实现代码得以相同。
在本次分享中,我准备先对 ae.h
进行阅读,也即大概了解 ae 事件库完成后所提供的接口,然后对 ae_epoll.c
的 api 实现进行阅读。
在文末我也简单总结了我个人从这两个文件所看出的事件库的设计。
今天面试的时候面试官花了不少时间琢磨一段 C 程序代码,因为之前自己学的时候喜欢看很多相关东西,而且确实看过有关编译器实现的部分细节所以基本也都答出来了,但确实被问到的时候而且在面试后自己试了一下才惊叹于这样居然也可以编译通过...
先说结论: