标签:
1. 进程:
(1)程序与进程
程序是计算机指令的集合,文件形式存储在计算机磁盘上。
进程是程序执行的一个实例,是一个程序在其地址空间的一次执行活动。
一个程序可以对应着多个进程。
进程是资源申请,调度看,独立运行的单位。
(2)进程的组成:
内核对象:系统用来存放进程的相关统计信息的地方,是操作系统内部分配的一个内存块。
地址空间:包含所有可执行模块或DLL模块的代码和数据,还包含动态分配的内存空间,线程的栈和堆分配的空间。
(3)进程不执行任何程序,进程只是线程的容器,是线程执行程序的环境。
每个进程都有自己独立的地址空间。
2. 线程:
(1)线程的组成:
线程的内核对象:操作系统用它来管理线程
线程栈(stack):用于维护线程在知心函数时所需的函数参数和局部变量。
系统从进程的地址空间中分配内存,供线程栈使用。
线程只有一个内核对象和栈,所需的内存空间少。
(2)线程的运行
系统为每一个线程安排时间片,循环的运行每个线程的时间片,同一时间其实只有一个线程在运行,但是时间片很短,所以
多个线程看起来感觉像在同时运行一样。
为啥一般采用多线程而不用多进程:
(1)所占的空间资源:对于进程的创建来说,系统要为其创建4GB的地址空间,耗费的资源比较多,而线程只是在进程的地址
空间中创建,可以共享一个地址空间。
(2)进程间切换需要交换整个地址空间,而线程间切换只需要改变执行环境,效率更高
(3)线程间通信比进程间通信效率更高。
15.2 线程创建函数:CreateThread()
function CreateThread(
lpThreadAttributes: Pointer; {安全设置}
dwStackSize: DWORD; {堆栈大小}
lpStartAddress: TFNThreadStartRoutine; {入口函数}
lpParameter: Pointer; {函数参数}
dwCreationFlags: DWORD; {启动选项}
var lpThreadId: DWORD {输出线程 ID }
): THandle; stdcall; {返回线程句柄}
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4737860.html