书法字典:https://www.shufadict.com

多线程总贴

 

进程

从Win32的角度来看,进程含有内存和资源,进程拥有的内存最大可高达2GB。

内存

1. Code 只读的,这是CPU唯一允许执行的内存

2. Data 包括程序中的变量,不包括函数中的局部变量,分为全局变量和静态变量

3. Stack 调用函数时使用,包含局部变量,每个线程创建时都有一个Stack

资源

1. 核心对象-文件句柄,线程等

2. 用户资源-窗口,对话框,字符串等

3. GDI资源-Device Context和Brushes等

进程本身并不能够执行,它只是提供一个安置内存和线程的地方,Matt Pietrek在其Windows 95 System Programming SECRETS一书中的解释是:进程就是一大堆对象拥有权的集合,也就是说,进程拥有对象,进程可以拥有内存(更确切的说是memory context),可以拥有file handles,可以拥有线程,可以拥有一大串DLL模块(被载入这一进程的地址空间)。

 

线程

一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

 

为什么使用多线程而不使用多进程? 

线程比进程廉价,启动和退出更快,占用资源更小,切换更容易。

 

Atomic Operation

同步和异步

同步的(synchronous) 同步synchronization

异步的(asynchronous) 异步asynchronization

假设有两个程序A和B,当程序A调用B时,A停下来不动,直到B执行完以后A才继续执行,这就是所谓的synchronous,若A调用B后,直接继续执行而不管B的状态,这就是所谓的asynchronous,在Win32 API中,SendMessage()是同步行为,而PostMessage()是异步行为。

SendMessage在发送完消息后,会等待该消息处理完毕再返回继续执行,而PostMessage则是发完消息就指着执行,不管发出的消息是否被处理完。

 

Mutex和Critial Section比较

1. 等待Mutex比等待Critical Section的时间要长100倍,因为前者是核心对象,后者不是,前者必须进入kernal mode才起作用,后者在user mode就可以了

2. 前者可以跨进程使用,而后者只能在同一个进程内使用

3. 前者可以指定等待时间,超过该时间则不再等待,后者不能。

注:Mutex是Mutual Exclusion的缩写

 

跨进程使用Mutex

可以给Mutex对象指定名称,其他线程可以用名称来处理该mutex,注意mutex的名称是系统唯一的,所以要使用独一无二的名字。

 

Glossary

cooperative 合作的

preemptive 抢占的 preemptive multitasking 抢占式多任务

二者的区别是,前者不能打断正在运行的任务,后者则可以。

Atomic Operation 原子操作,能够不被中断的一直执行完的操作

posted on 2009-10-27 10:22  翰墨小生  阅读(597)  评论(2编辑  收藏  举报

导航

书法字典:https://www.shufadict.com