17、深入浅出MFC学习笔记,进程与线程简介

简介: 一、基本概念 1、线程是CPU的调度单位。 2、核心对象(kernel object)是系统的一种资源,系统对象一旦产生,任何应用程序都可以开启并使用该对象。系统给予核心对象一个计数值作为管理之用。     前三者用于线程的同步,file-mapping用于内存映射文件。

一、基本概念<?xml:namespace prefix = o />

1、线程是CPU的调度单位。

2、核心对象(kernel object)是系统的一种资源,系统对象一旦产生,任何应用程序都可以开启并使用该对象。系统给予核心对象一个计数值作为管理之用。

wps_clip_image-6534

    前三者用于线程的同步,file-mapping用于内存映射文件。这些核心对象的产生方式不同,但都会获得一个handle作为识别,每次被使用,对应的计数值加1,结束的方式则相当一致,调用CloseHandle

    “进程对象”并不是用来执行程序代码,程序代码的执行是线程的工作,“进程对象”只是一个数据结构,系统用它来管理进程。

3、进程的生命周期

    我们双击程序图标执行程序,其实就是shell调用CreateProcess来激活一个进程,流程如下:

    1Shell调用CreateProcess激活XXX.exe

    2)系统产生一个“进程核心对象”,计数值为1

    3)系统为此进程建立一个4GB地址空间。

    4)加载器将必要的代码加载到上述地址空间中,包括程序,数据,以及所需的动态链接库。这些动态链接库被记录在可执行文件(PE文件格式)的.data section中。

    5)系统为此行程建立一个线程,称为主线程。线程才是CPU时间分配的对象

    6)系统调用C runtime函数库的Startup Code

    7Startup Code调用.exe程序的WinMain函数。

    8)应用程序开始运行。

    9)使用者关闭应用程序,使WinMain中的消息循环结束掉。

    10)回到Startup code

    11)回到系统,系统调用ExitProcess结束进程

     可以说,通过这种方式执行起来的所有Windows程序都使Shell的子进程,本来母进程与子进程之间可以有某些关系存在,但shell调用CreateProcess时已经把母子间的脐带剪断了。

    如果一个进程想结束自己的生命,可以调用:

    VOID ExitProcess(UINT fuExitCode);

    如果一个进程想结束其他进程的生命,可以使用;

    BOOL TerminateProcess(HANDLE hProcess, UINT fuExitCode);

TerminateProcess一般不建议使用。因为一般进程结束时,系统会通知该进程所开启的所有DLL,如果以TerminateProcess结束一个进程,系统不会做这件事,这并不是我们希望的。

4、线程的生命周期

    执行程序代码,是线程的工作。当一个进程建立后,主线程也产生了,我们可以调用CreateThread产生额外的线程,系统会帮我们做如下事情:

    1)配置“线程对象”,其handle将成为CreateHandle的返回值

    2)设定技计数值为1

    3)配置线程的context

    4)保留线程的堆栈

    5)将context中的堆栈指针和指令指针设定好

所谓工作切换就是对线程context的切换。

线程之间不必考虑控制权释放的问题,因为Win32操作系统的特点是强制性多任务的。

线程的结束一种是正常退出结束;另一种是通过ExitThread(做善后工作);或别的线程通过TerminateThread将它终结掉;当然进程结束,线程也就结束了。

还可以以_beginthreadex取代CreateThread

关于线程优先线论述,可以参见[1P44].

参考

[1] 深入浅出MFC

目录
相关文章
|
9天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
24天前
|
消息中间件 安全 Linux
线程同步与IPC:单进程多线程环境下的选择与权衡
线程同步与IPC:单进程多线程环境下的选择与权衡
57 0
|
25天前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
68 0
|
1月前
|
存储 消息中间件 算法
《操作系统》——进程与线程
《操作系统》——进程与线程
|
1月前
|
并行计算 安全 Unix
Python教程第8章 | 线程与进程
本章主要讲解了线程与进程的概念,多线程的运用以及Python进程的相关案例学习
36 0
|
1月前
|
分布式计算 并行计算 Java
浅析Python自带的线程池和进程池
浅析Python自带的线程池和进程池
79 0
|
26天前
|
安全 Python
Python中的并发编程:多线程与多进程技术探究
本文将深入探讨Python中的并发编程技术,重点介绍多线程和多进程两种并发处理方式的原理、应用场景及优缺点,并结合实例分析如何在Python中实现并发编程,以提高程序的性能和效率。
|
25天前
|
消息中间件 Linux 调度
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
65 0
|
1月前
|
资源调度 算法 Linux
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
53 0
|
2天前
|
调度 Python
Python多线程、多进程与协程面试题解析
【4月更文挑战第14天】Python并发编程涉及多线程、多进程和协程。面试中,对这些概念的理解和应用是评估候选人的重要标准。本文介绍了它们的基础知识、常见问题和应对策略。多线程在同一进程中并发执行,多进程通过进程间通信实现并发,协程则使用`asyncio`进行轻量级线程控制。面试常遇到的问题包括并发并行混淆、GIL影响多线程性能、进程间通信不当和协程异步IO理解不清。要掌握并发模型,需明确其适用场景,理解GIL、进程间通信和协程调度机制。
18 0