码迷,mamicode.com
首页 > 编程语言 > 详细

VC++深入详解——第15章:多线程,进程,线程

时间:2015-08-17 23:04:38      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

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;                     {返回线程句柄}

 

VC++深入详解——第15章:多线程,进程,线程

标签:

原文地址:http://www.cnblogs.com/yanliang12138/p/4737860.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!