# Words of a Master Programmer

## 模块、进程、线程的区别

模块是 EXE， DLL 在文件映射到内存中的结构，这个模块就叫做结构。因为在文件里面很多的空余的空间都省去了，当系统把执行文件搬到内存里面去的时候，把执行文件展开了，所以，它在内存中的位置就是一个模块。

线程是给模块分配一个堆栈，就开始运行。因为一个应用程序有一个主线程，就是 C 语言中的 main. 主线程可以自己创建很多的线程。所以从模块到开始执行，如果它要有一个完整的空间映像，这个映像就叫进程。

其实，进程不是一个执行单位，进程的执行是通过它的主线程来执行的。最早的时候， UNIX 是没有线程的概念的，这时进程就等于主线程。但是现在的操作系统中，这两个概念是完全不同的。进程并不是一个执行的单位。它仅仅只是一个任务，所以进程也可以叫做一个执行的任务，但是真正是通过线程去工作的。线程可以是主线程，也可以是主线程创建的线程。

## 其他

我们从语言的发展可以看到，计算机语言的发展是不断地向人的思维进行靠拢的一个渐进的过程。正因为现在所有的编程语言都以人为中心，以人的思维为出发点，所以编写程序时就会跟机器的实现相脱离。这就导致很多人看上去都会编写程序，但是编写出的程序总是出现这样、那样的问题，或者效率极低。而这样的程序员又不能从根本上解决这样的问题，因为他对机器和编程语言的关系和原理不了解。

所以说，要成为一个真正的高手，就必须知道计算机的过去，了解它的现在，才能预测将来。要知道你所做的程序在硬件上是怎样被运行的。


相关：[[software-program-application|software-program-application]]
