Win 32 多线程程序设计学习笔记之一:基本概念
来源:互联网 发布:发乎于情止乎于礼 编辑:程序博客网 时间:2024/06/05 03:39
1.从win32角度看,进程含有内存和资源。被进程拥有的内存,理论上可以高达2GB。资源则包括核心对象(如file handles和线程),USER资源(如对话框和字符串),GDI资源(如Devives Context和brushes)。
2.进程本身并不能够执行,它只是提供一个安置内存和线程的地方。
3.Matt Pietrek在Windows 95 System Programming SECRETS一书中的解释是:“进程就是一大堆对象的所有权的集合”,也就是说,进程拥有对象。进程可以拥有内存(更精确地说是拥有memory context),可以拥有file handles,可以拥有线程,也可以拥有一大串dll模块(被载入这一进程的地址空间中)。
4.每一个进程都关系到内存。内存可以大致分为3种类型:
code,Data,Stack
5.Code是程序的可执行部分,一定是只读性质。这是CPU唯一允许执行的内存。可执行Windows NT的两种芯片:Intel芯片和RISC芯片都有这项限制。
6.Data是你的程序中的所有变量(不包括函数中的局部变量),可以区分为全局变量和静态变量两种。当然线程也可以使用malloc()或new动态配置内存。
7.Stack是你调用函数时所用的堆栈空间,其中有局部变量。每个线程产生时配有一个堆栈。如果不需要,操作系统会将它动态扩充。
8.进程和内存并没有真正”做“什么事情。一旦cpu开始执行程序代码,你就有一个“线程”。在同一时间同一进程,你可以拥有一大把线程,执行同一段代码。定义一个线程,需要的数据并不多。线程在“任何时刻下的状态”被定义在进程的某块内存中,以及CPU寄存器中。其他重要的数据,如变量以及应用程序的调用堆栈,存储在进程中的那些可被其他线程共享的内存中。
9.线程相比于进程而言线程廉价,启动比较快,退出也比较快,对系统资源的冲击比较小,而且,线程彼此分享了大部分核心对象(如file handles)的拥有权。
10.Unix产生一个进程所需的额外负担(overhead)比在win32中低的多。然而,win32产生一个线程,代价又更廉价的多。一个单cpu的Windos NT机器上拥有500个线程并不是太过分的事情,而大部分Unix如果有500个进程就会有严重的效率问题,甚至几十其中大部分没有活动(non-active)。
11.在抢先式多任务系统中,当硬件计时器认为某个线程已经执行很久了,就会发生一个中断(interrupt),于是CPU取得目前这个线程的当前状态,也就是把所有寄存器中的内容拷贝到堆栈中,再把它从堆栈中拷贝到一个CONTEXT结构(这样便存储了线程的状态)中,以备以后再用。
12.要切换不同的线程,操作系统应先切换该线程所隶属之进程的内存,然后再恢复改线程放在CONTEXT结构中的寄存器值。这个过程被称作context switch。也就是换一套memory context--page directory和page tables。
13.不同线程间如果需要通讯,唯有依赖特别的设计,使之拥有共享内存(shared memory)。如果两个线程属于同一进程,他们将共享所有的内存。
14.一个操作(operation)如果能够不受中断地完成,我们称之为atomic operation。检查标记和设立标记必须是一个atomic operation,如果它被中断,就会产生一个race condition。检查标记和设立标记的动作非常平常,所以被实现于很多CPU硬件中,名为Test和Set指令。实际上只有操作系统会使用Test和Set指令。操作系统提供比较高阶的机制,让你的程序用以取代Test和Set。
- Win 32 多线程程序设计学习笔记之一:基本概念
- Win 32 多线程程序设计学习笔记之二:线程
- Win 32 多线程程序设计学习笔记之五:终止线程
- 深入浅出Win32多线程程序设计之一:基本概念
- Win 32 多线程程序设计学习笔记之三:*WaitFor*Object函数
- Win 32 多线程程序设计学习笔记之四:同步控制(Synchronization)
- Win 32 多线程程序设计学习笔记之六:异步I/O(Overlapped I/O)
- win 32多线程程序设计读书笔记
- Unreal 学习笔记之一-基本概念
- Erlang 程序设计 学习笔记(一) 基本概念
- Win32多线程程序设计基本概念
- WIN32多线程程序设计学习笔记
- Win32API多线程程序设计学习笔记
- Linux多线程程序设计学习笔记
- 学习笔记 -- Win32 多线程程序设计
- WIN程序设计笔记
- 《linux程序设计学习笔记》之一---/proc文件系统
- 《linux程序设计学习笔记》之一---POSIX线程
- 级联查询 oracle 中connect by prior实现递归查询
- 20个开发人员非常有用的Java功能代码
- pathModifier
- eclipse中Project'XX'is missing required library:'[路径]\XXX.jar�
- 重装Win7后恢复和找回Ubuntu启动项
- Win 32 多线程程序设计学习笔记之一:基本概念
- xml VLOOKUP 使用
- linux tty pty pts 概念 区别
- 开发板和Linux系统挂载报错(mount: RPC)
- 观察者模式
- 对条件变量(condition variable)的讨论
- 联合union
- 机器学习推荐书目
- C++快速排序 精简版