以下解释出具《深入浅出MFC》——侯捷 译
模块——如果我们能够知道操作系统如何看待模块和进程,就能够给出具体的答案。一段可执行的程序(包括EXE和DLL),其程序代码、数据、资源;被加载到内存中,由系统静置的数据结构来管理它,就是一个块,这里所有的数据结构,名为Module/'mɑdʒul/ (模块、组件) Database (MDB),其实就是PE格式中的PE表头,你可以从WINNT.H文件中找到一个IMAGE_NT_HEADER结构。
进程——进程主要表达“拥有权”的观念,线程则主要表达模块中的程序代码的“执行事实”。进程拥有地址空间(由memory context决定)、动态配置而来的内存,文件,线程和一系列的模块。操作系统使用一个所谓的Process Database(PDB)数据结构,来记录(管理)他所拥有的一切。
线程——线程则主要表达模块中的程序代码的“执行事实”。系统也是一个特定的数据结构(Thread Database ,TDB)记录线程的所有相关数据,包括线程局部储存空间(Thread Local Storage,TLS)、消息队列,Handle 表格,地址空间(Memory Context)等等。
最初,进程是以一个线程(称为主线程,primary thread)作为开始,如果需要,进程可以产生更多的线程(利用CreateThread),让CPU 在同一时间执行不同段落的码。当然,我们都知道,在只有一颗CPU的情况下,不可能真正有多任务的情况发生,“多线程同时工作”的幻觉主要是靠调度器来完成——它以一个硬件定时器和一组复杂的游戏规则,在不同的线程之间做快速切换操作,