Win32多线程程序设计(一)

进程和线程

1.进程

从Win32的角度来看,进程就是一大堆对象的拥有权的集合,进程拥有的对象包括内存和资源两类

进程拥有的内存:

被进程拥有的内存可以分为以下三个类型

1)      Code

Code是程序的可执行部分,一定是只读性质

2)      Data

Data是程序中的所有变量(不包括函数中的局部变量),可以分为全局变量和静态变量两种

3)      Stack

每个线程产生时配有一个堆栈,调用函数是也会分配一个堆栈,Stack中存放着局部变量

注:这些内存对进程中的所有线程都是可用的,这在多线程中带来了很大的方便,同时也带来很大的灾难

进程拥有的资源:

进程拥有的资源包括以下几类

1)      核心对象

如线程即文件句柄

2)      USER资源

如对话框和字符串

3)      GDI资源

如Device Context和画刷

进程就像一本活页笔记本,你可以在其中的活页上写东西,也可以擦掉内容或整页撕掉,活页笔记本只是持有那些东西而已,同理,进程本身并不能够执行,它只是提供一个安置内存和线程的地方。

注:

线程是进程拥有的一个对象

2.线程

进程和内存并没有真正的做事情,一旦CPU开始执行代码,就有了一个线程

注:

我对进程和线程的理解是这样的:

进程类似一个大的房间,房间里有书柜,饮水机,桌子,椅子,电脑及人等,房间是一个容器,拥有着上述各种对象,对房间来说,上述对象没什么本质的区别,只是类别不同而已,

线程类似于房间中的人,可以利用房间中的其他对象执行任务,如一个人拿着杯子去饮水机接水,对进程来说,线程只是他拥有的一个对象,也许比较特殊一点而已

真正执行任务的是人,人利用进程中的其他资源执行某一项任务,更进一步说,房间里可以有多个人,当多个人都要接水时,就涉及到饮水机的互斥访问了,当多个人需要合作完成某项任务了,如一起打dota,那么就需要利用房间里的一些资源如电脑,进行通信了

更进一步来说,当房间里一个人出去了,那对房间来说,只不过出去一个人,对进程来说,失去了一个线程或失去了一个对象,只不过这个对象有点特殊,可以称之为核心对象,同样,当房间里搬出一张桌子,也是失去了一个对象。

这样很多问题就一目了然了,如为什么不使用多个进程,原因很简单,如果我们要接一杯水,我们会重新盖个房间呢,还是在已有的房间里派个人呢?学究一些的话,原因如下

1)  增加一个线程的开销更少

2)利用已有的进程中的资源使资源的利用率更高 

转载于:https://www.cnblogs.com/liuhao2638/archive/2012/11/11/2765359.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值