态度诚恳,但是缺乏洞见_Python源码剖析书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Python源码剖析 > 态度诚恳,但是缺乏洞见
LipingTaBaBa Python源码剖析 的书评 发表时间:2012-01-12 00:01:02

态度诚恳,但是缺乏洞见

这本书其实不是面向python用户的,而是剖析python的运行时实现。更适合于进阶C程序员以提高C语言能力。

不过不知道是作者功底不够,还是时间太紧,很多地方作者罗里罗嗦的写了好几页纸,比人家源代码还长,可还没有源代码里的注释讲得清楚。

我仔细看过的有第十六章《Python的内存管理机制》,下面以这个为例。

这章只讲python的obmalloc.c这一个文件,很多内容直接是从注释中拷贝的(比如图16-1),可是注释中最关键的几个地方,书中都没说清楚。

关于struct pool_header,作者花了两页纸讲free block链表的管理,其实free block链表本身是《操作系统》课程中的基本概念,没有必要花这么大篇幅,更没有必要使用“你会发现freeblock开始成为一个苏醒的精灵”这类废话。

这一部分,真正令人迷惑的是pool_header中的nextoffset和maxnextoffset,这两个member是在pool初始阶段用于管理空闲block的,其功能完全可以被freeblock取代,但是为什么python实现要加上这两个member呢?

书中对这个疑惑不着一字,而看注释就非常明白:如果起始就构建一个完整的空闲block列表,会访问整个pool的所有block;而nextoffset则只需要访问pool的前段,这样可以利用机器的VM机制,达到“没有真实访问就不用OS真的分配从而节省内存”的目的。


又比如usedpool数组,代码设计得非常别扭。书中对其如何别扭的工作有讲述,但是对为什么要这么设计,没有说一句话;同样在注释中,注释的作者说“我也不清楚为什么要搞得这么复杂,也许是为了增加cache友好性,但是实在代价有点高”。


再有锁的问题,在源码中只有一句话“ * Python's threads are serialized, so object malloc locking is disabled.” 我不熟悉python的线程,理解不了为什么内存分配可以不用锁,想到书中找答案,结果书中也是完全忽略,一个字的评论都没有。

还有一个问题,陈儒总是把malloc和free说成是“操作系统提供的内存管理接口”,这个说法不太严谨,malloc和free是C库提供的,brk才是OS的接口。 在源码注释中,用的说法是“Underlying general-purpose allocator”,就非常准确。

不过话说回来,这本书在国产IT著作中算是不错了,至少看得出来作者是很诚恳的看过代码,也很诚恳的与读者分享。结合这本书看代码,我觉得自己的功力有明显提升 :)

展开全文
有用 17 无用 0

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“态度诚恳,但是缺乏洞见”的回应

欣蔚蓝 2016-12-06 12:38:02

这本书应该是个源码的Index,梳理清楚Python代码的结构和注意点,面面俱到是不可能的,很多方面涉及到很多的知识点,需要加上自己额外的鼓捣才行

Messi 2015-12-06 16:20:47

这样啊,那楼主觉得,如果要深入学习python和C的couse,有哪些不错的资源推荐?谢谢~

这就是生活 2012-09-09 23:40:53

内存管理这一章看着看着就不知所云了,接着我也就没有仔细看下去了。
这样的内存分配有没有抓呢的论文或者是专业的进行性能测试。
真的是非常的复杂,一般人是想不到这样的内存管理机制的。
呵呵,当然Python的作者当然不是一般人。

tomoyo 2012-05-13 23:46:03

@brownianwalker 应该是的,GIL确实使多线程串行运行的。

Peter W 2012-05-12 22:28:58

我还没看过这本书,不过关于线程不需要锁的问题有可能是由于Python的全局锁的问题,也就是说Python的线程并不是并行的。可以去查一下关于Global Interpreter Lock (GIL) 的信息。

hoterran 2012-03-29 16:46:50

严谨,估计很多人都不知道malloc,free 是glibc的库函数,而非系统调用,系统调用是brk,mmap.
虚拟机语言源码剖析如果单纯分析源码确实给c程序员提供写复杂数据结构提升功力而非给语言使用者看的.

tomoyo 2012-03-27 19:42:12

再有锁的问题,在源码中只有一句话“ * Python's threads are serialized, so object malloc locking is disabled.” 我不熟悉python的线程,理解不了为什么内存分配可以不用锁,想到书中找答案,结果书中也是完全忽略,一个字的评论都没有。
---
当时看的时候也有同感。

另外python里面内存管理相关的注释相对其他部分的注释翔实不少,oython的内存管理看的让我拧脑袋的感觉