书法字典: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   翰墨小生  阅读(598)  评论(2编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

< 2009年10月 >
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7
书法字典:https://www.shufadict.com
点击右上角即可分享
微信分享提示