windows程序设计的一些基础知识点—— 进程及其线程

本文详细解释了进程和线程的概念及其区别。介绍了进程作为系统资源分配和调度的基本单位,包含了内核对象和地址空间两大部分;而线程作为进程中的独立调度单位,拥有自己的内核对象和堆栈。此外,还探讨了线程与进程间的资源共享以及它们的状态转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程——通常被定义为一个正在运行的程序的实例,是可以与其他程序并发执行的段程序的一次执行过程,是系统进行资源分配和调度的基本单位。

进程是运行中的程序,是程序的一次运行活动。进程是动态的概念,程序是静态的概念,是指令的集合。

进程由两个部分组成:
1
是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。

2是地址空间。它包含所有可执行模块或动态链接库模块的代码和数据。它还包含动态内存分配的空间,如线程堆栈和堆分配空间。

进程状态的转换和控制:1就绪状态。2执行状态。3阻塞状态、4挂起状态。

 

       若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,该线程负责执行包含在进程的地址空间中的代码。每个线程都有它自己的一组C P U寄存器和它自己的堆栈。每个进程至少拥有一个线程,来执行进程的地址空间中的代码。

       建一个进程时,系统会自动创建它的第一个线程,称为主线程。然后,该线程可以创建其他的线程,而这些线程又能创建更多的线程。

 

                 进程从来不执行任何东西,它只是线程的容器。

 

线程——线程是进程中的一个实体,是系统实施调度的独立单位。

它也是由两个部分组成的:
1
是线程的内核对象。操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。
2
是线程堆栈。它用于维护线程在执行代码时需要的所有函数参数和局部变量。

 

      线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,你有两个或多个线程正在运行,那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。

 

      由于进程需要很多的地址空间占用了很大的系统资源,而线程只有一个内核对象和一个堆栈,因此需要很少的系统资源,开销比进程少,因此始终都应该设法用增加线程来解决编程问题,而要避免创建新的进程,但也有些程序设计用多个进程来实现会更好些。应该懂得权衡利弊,经验会指导你的编程实践。

 

      若要使所有这些线程都能运行,操作系统就要为每个线程安排一定的 C P U时间。它通过以一种循环方式为线程提供时间片(称为量程),造成一种假象,仿佛所有线程都是同时运行的一样。

      当你的电脑有多个CPU时,OS就可以使用一些算法实现CPU上线程负载的平衡。如果OS不支持多核的话,系统每次安排一个线程运行,其他CPU处于空闲状态。

       设计一个拥有多线程的应用程序,就会扩大该应用程序的功能。如果你的计算机拥有两个C P U,你的应用程序中有两个线程,那么两个C P U都将处于繁忙状态。实际上,你是让两个任务在执行一个任务的时间内完成操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值