有关线程与进程的基础与理解
来源:互联网 发布:windows故障转移集群 编辑:程序博客网 时间:2024/06/10 08:59
1.线程是执行线程的简称,线程函数是线程的一个执行事实,线程函数的执行期,也就是该线程的生命期。
2.相关的几个名词:
Process Database(PDB):进程数据结构;
Module Database(MDB):模块数据结构;
Thread Local Storage(TLS):线程局部存储;
Thread Database(TDB):线程数据结构。
3.模块:系统构建的一个用来管理代码,数据,资源的一种数据结构。
进程:一大堆拥有权的集合。进程拥有地址空间,动态配置而来的内存,文件,线程和一系列的模块。
线程:是一个执行事实,系统用一个特定的数据结构,记录线程的所有相关数据,包括线程局部存储空间(TLS),消息队列,句柄表, 地址空间等等。切记,CPU调度的单位是线程而不是进程。
4.windows如何加载一个应用程序?
当windows加载器将程序加载到内存中,KERNEL32挖出一些内存,构建出一个PDB,一个TDB,一个以上的MDBs(视程序使用DLL的多少而定)。针对TDB,操作系统又要产生出memory context,消息队列,句柄表,环境数据结构(EDB),当这些系统内部数据结构都构建完毕,指令指位器(Instruction Pointer)移到程序的进入点,才开始程序的执行。
5.线程优先级问题?
线程的“父亲大人”(进程)拥有所谓的优先级等级,可以在CreateProcess的参数中设定。线程基本上继承自其父进程的优先级,然后加上CreateThread参数中的微调差额(-2~+2),获得的结果便是线程所谓的基本优先级,范围从0~31,数值大则优先级高。::SetThreadPriority是调整优先级的工具,它所指定的也是微调差额(-2~+2)。
6.线程的冻结问题?
可以用::SuspendThread强制冻结一个线程(::ResumeThread可以解除冻结)。线程会被冻结,表示这个线程“要去抓取消息,而线程所附带的消息队列中却没有消息”。如果一个线程完全和UI(用户界面)没有关系,并不表示这个线程没有消息队列,只是它的程序代码中没有消息循环,这种线程叫worker thread(工作者线程)。正因为它没有消息循环的代码,所以它不可能被冻结。如果某个线程调用::GetMessage而其消息队列却是空的,这个线程便被冻结,知道再有消息进来为止。冻结的意思就是不管你的线程优先级多高,暂时退出CPU的调度行列。
7.worker thread与UI thread的差别》
从windows操作系统的角度来看,线程就是线程,并没有不同,不需要分类,但从MFC角度看,分为工作者线程和用户界面线程。但是要注意,线程本来就带有消息队列,而如果线程程序代码中带有一个消息循环,就称为UI thread。
8.有关窗口管理的问题?
为程序中每一个窗口产生一个线程,负责窗口行为是错误的认识。因为子窗口一旦切换,上述做法会导致线程也切换,而线程的切换要花费大量的系统资源。比较好的做法是把所有UI操作都集中在主线程中,其他的纯粹计算的工作才考虑交割工作者线程去做。
9.为你的程序产生的第一个进程和线程,是系统加载器以及核心模块(KERNEL32)合作的结果,而不是调用CreateProcess和CreateThread产生的。MFC程序的第一个操作是CWinApp::CWinApp(比WinMain早),在那里没有产生线程的操作,而是进行收集线程的相关信息。
- 有关线程与进程的基础与理解
- 进程与线程的理解
- 进程与线程的理解
- 进程与线程的理解
- 理解进程与线程
- 进程与线程理解
- Android中线程与进程的理解
- android中的进程与线程的理解
- Android中线程与进程的理解
- <操作系统>进程与线程的有趣理解
- <操作系统>进程与线程的有趣理解
- Android中线程与进程的理解
- 进程与线程的通俗理解
- 多线程之进程与线程的理解
- android中的进程与线程的理解
- 关于进程与线程的理解
- 进程与线程的通俗理解
- 进程与线程一个简单的理解
- 其实不是没个人都可以隐身
- Using eventhandler to change the folder's content type
- FAT32解析示例
- 国芯刷机程序选择及刷机失败解答
- C语言实现毫秒级定时
- 有关线程与进程的基础与理解
- 80x86汇编_金手指鼠标画笔演示程序
- 新年快乐
- 2010-02-17
- 如何安装OpenCV2.0
- dataGridView绑定数组的删除问题
- 嵌入式linux基础知识大纲
- JQuery常用方法小结
- 关于myeclipse注册机使用的问题