并发的艺术-1:起源
并发的概念充斥在各种各样的程序设计书籍中,甚至有许多专门教授利用某一门编程语言进行并发编程的书籍。然而在我看来,并发确是高于语言的通用概念,本文就作为并发系列的第一篇,阐述我对于并发的理解,希望能和各位看官碰撞出思想的火花。
并发的概念充斥在各种各样的程序设计书籍中,甚至有许多专门教授利用某一门编程语言进行并发编程的书籍。然而在我看来,并发确是高于语言的通用概念,本文就作为并发系列的第一篇,阐述我对于并发的理解,希望能和各位看官碰撞出思想的火花。
glibc(GNU C Library)是Linux采用的C语言运行库,它提供了ISO C11/POSIX.1-2008等标准定义的一系列API,几乎被所有应用所引用。阅读其源码能够提升对计算机底层组件的认知层次,修炼内功。
不同于python这类解释型语言可以直接在解释器中运行程序,C作为编译型语言需要将源码编译链接成机器码后才能执行(关于编译链接的具体机制可以参看我之前写的介绍文章:理解C语言-3:编译链接)。在glibc这样的超大型项目中,编译过程尤为复杂:不仅需要考虑不同平台间的不同配置项,还需要通过awk/sed等文本处理程序生成各种项目依赖文件。如果贸然扎进源码分析某个模块,很容易陷入不知道某个具体符号来自哪里的困境,铩羽而归。
GNU Make负责完成如此负责的编译,本文就通过分析Make的调试信息,解析编译glibc的具体过程,引出glibc源代码的目录结构,为后续分析glibc中的具体模块打下基础。