学习python的我,为何越发觉得熟悉Linux内核真的很重要?

Python作为目前最为火爆的脚本语言,其丰富的Package库和跨平台等特性有目共睹。
曾今,以功能实现、产品交付为工作主导的我,自以为所谓的“跨平台”就是不需要去了解平台细节,Python语言底层都封装好了。
但如果想从性能方面思考自己的程序,多压榨机器资源来体现自身的专业素养,就不得不激发自己的好奇心,去了解这一个个“封装”都咋实现的,不同有什么区别。
比如,前几周开发Python爬虫时,就有好几个问题在脑海盘旋:
1. 做这个项目,在windows上部署开发环境快些,还是linux?比如项目依赖的各种pypi库的安装在windows上是否方便。有时需要用到第三方工具,比如Selenium,PyQt,Fidder,MongoDB客户端或者Potia框架,在两个平台上的安装、熟悉花费的时间是否相同?
2. 开发过程中,不同的操作系统会不会处理的细节不同?比如Windows的控制台字符编码就没有utf8,那从服务器返回的json字符串,如果我想做相关打印,就需要进行额外的转码处理。
3. 同样的程序,在不同的平台上是否效率一样?比如多线程、多进程爬虫,两边代码都一样,谁先爬完就成了两个操作系统对于进程、线程管理的比拼。
一方面,看自己要花多久能完成程序的开发,另一方面,再看程序要花多久能完成预期的目标,一切回到ACM般的趣味之中。

当然不全是出于效率优化的角度,提醒我不要放下linux,还在于Python源码的磁层实现。
Python解释器核心逻辑在于对操作码(opcode)的解析与执行。这个玩意就很像汇编代码了,特别是看到熟悉的JUMP指令。
再看到它每100条opcode进行一次线程标准调度,就在想“这不是和CPU的时间分片”很像么?
最后看到多线程的实现,对不同的操作系统的原生线程进行封装,交由GIL处理。
你肯定也会想,这个语言的实现似乎借鉴了操作系统内核的原理。

最近我在读Programming Python,第一个向读者介绍的内容就是系统工具——sys和os两个模块,前者封装了和Python虚拟机相关的接口,后者封装了和操作系统(特别是文件系统)相关的接口。Python模块导入与sys.path有关,这个名字又不得不让人想到Windows和Linux都有的环境变量PATH(在Python中,这个PATH就是os.environ),操作系统是通过PATH来寻找命令的,就像Python通过sys.path来找模块一样。
你看,这又是完美的借鉴。

所以作为开发者,你得知道程序的世界不是凭空造出来的,特别是这些风靡了这么多年的操作系统和编程语言,一行行代码都有凭有据,哪怕是个idea都有出处(你甚至在Python源码的注释里会看到某处算法借鉴了某某论文)。特别是“系统工具”这个说法:操作系统对于脚本语言来说是工具。这再一次强调了,开发者应该对程序执行环境、上下文保持注意力。

Python如此,Linux的开发其实也是如此。GNU当年刚成立,高举着“自由软件”大旗,但志愿者少,原因在于他们缺少产品,只有编辑器Emacs和编译器GCC。Linux的开发也不是闭门造车,它就用到这两个工具,再加上以Minix操作系统为参考,就逐渐成了GNU的招牌。所以Python和Linux真的很像,都是idea+idea=更大的idea,工具+工具=更大的开发工具。

Guido和Linus的编程哲学几乎是一致的,可能同是开源,才会这么惺惺相惜吧。(此处没有鄙视Windows之意)
学习Python,真的有必要了解Linux内核。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值