1. 进程Processes
从Win32的角度来看,进程含有内存和资源。被进程拥有的内存,理论上可以高达2GB,资源则包含核心对象(如file handles和线程)、USER资源(如对话框和字符串)、GDI资源(如Device Context和brushes)。
进程本身并不能够执行,他只是提供一个安置内存和线程的地方。
内存
大致可以分为三种类型:
Code
Data
Stack
Code是程序可以执行部分,一定是只读(read only)性质。这是CPU唯一允许执行的内存。
Data程序中所有变量,不包括函数中的局部变量,分为全局变量和局部变量两种。当然线程也可以使用Malloc()和new动态配置内存。
Stack包括局部变量,没个线程产生时配有一个堆栈。
2. 线程Threads
执行单元
多进程与多线程
线程启动和退出比较快。
多进程共享资源比较复杂,如共享file handles
产生一个新进程容易,但其额外负担比较惊人:必须站如服务器软件的一个全新副本,配置大量内存并初始化。
线程可以共享内存。
3. Context Switch
切换不同的线程,操作系统应先切换该线程所隶属之进程的内存,然后恢复该线程放在CONTEXT结构中的寄存器值。这个过程成为Context Switch。
切换线程时,CPU取当前线程的当前状态,即把素有寄存器内容拷贝到堆栈中,在把他从堆栈拷贝到一个CONTEXT结构中。
对于单CPU机器,多线程并不能提高工作效率,反而线程切换Context Switch需要额外的资源。Windows NT以其Symmetric multi-Processing(SMP)技术支持多CPU机器。