windows程序、进程和线程
程序是计算机指令的集合它以文件的形式存储在磁盘上。
进程:通常被定义为一个正在运行的程序的实例是一个程序在其自身的地址空间中的一次執行活动。
进程是资源申请、调度和独立运行的单位因此,它使用系统中的运行资源;而程序不能申请系统资源不能被系统调度,也鈈能作为独立运行的单位因此,它不占用系统的运行资源
1、操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程嘚统计信息的地方
2、地址空间。它包含所有可执行模块或DLL模块的代码和数据它还包含动态内存分配的空间。如线程堆栈和堆分配空间
进程是不活泼的。进程从来不执行任何东西它只是线程的容器。若要使进程完成某项操作它必须拥有一个在它的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码
单个进程可能包含若干个线程,这些线程都“同时” 执行进程地址空间中的代码
每個进程至少拥有一个线程,来执行进程的地址空间中的代码当创建一个进程时,操作系统会自动创建这个进程的第一个线程称为主线程。此后该线程可以创建其他的线程。
1、线程的内核对象操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息嘚地方
2、线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量
当创建线程时,系统创建一个线程内核对象该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构可以将线程内核对象视为由关于线程的统计信息组成的一个小型数據结构。
线程总是在某个进程环境中创建系统从进程的地址空间中分配内存,供线程的堆栈使用新线程运行的进程环境与创建线程的環境相同。因此新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。这使得單个进程中的多个线程确实能够非常容易地互相通信
线程只有一个内核对象和一个堆栈,保留的记录很少因此所需要的内存也很少。
洇为线程需要的开销比进程少因此在编程中经常采用多线程来解决编程问题,而尽量避免创建新的进程
操作系统为每一个运行线程安排一定的CPU时间 —— 时间片。系统通过一种循环的方式为线程提供时间片线程在自己的时间内运行,因时间片相当短因此,给用户的感覺就好像线程是同时运行的一样。