windows下进程与线程
windows下进程与线程
Windows是一个单用户多任务的操作系统,同一时间可有多个进程在执行。进程是应用程序的运行实例,可以理解为应用程序的一次动态执行;而线程是CPU调度的单位,是进程的一个执行单元。一个进程可以有多个线程,而一个线程只能从属于一个进程。
进程包含文本、数据、堆栈片段一级进程自身的资源(比如进程创建的文件、管道、同步对象等)。由操作系统负责管理进程及其资源,与进程相关的信息被保存在一个被称作进程控制块的结构中。
线程是操作系统分配CPU时间的基本实体。在一个多线程的应用程序中,每一个线程都有自己的堆栈,并且可以独立地操作同一程序中的其他线程。
一般来讲,操作对象是线程。
进程与线程的最大区别就是进程有自己的地址空间,而线程没有,线程共享进程的地址空间。进程内的两个线程可以访问同一个数据片段,因此,通过使用该数据片段可以实现线程间的通信。
线程间通信一:全局变量,线程监督。利用volatile关键词修饰,要求编译器不要将该变量缓存到一个寄存器当中,即允许别的线程对该变量进行修改。操作过程就是在开启线程的时候令监督变量为1,同时在线程中监督此变量,然后当要关闭该线程的时候,在主程序(线程)中将监督变量改为0,因此,在线程函数中检测到该变量变为0之后,就退出。
线程间通信二:采用消息机制。因为windows程序设计中,应用程序的每一个线程都拥有自己的消息队列,这样,在线程之间就可以方便的通过消息来传递信息。操作过程是定义一个用户消息,#define WM_USERMSG WMUSER+100, 在适当的时候,在子线程中调用PostMessage函数,将消息发送至主线程,同时可以传递参数。最后在主线程中把消息映射到相应的处理函数中。
线程同步:主要有同步对象与等待函数。
根据上面的概念图只说明一个关于信号量的问题,这个问题在DSP的操作系统DSP/BIOS中也遇到过。信号量在创建的时候会设置初始值和最大值,每有一个线程占用共享资源时,信号量递减1,当信号量大于0时,说明信号量对象一直是有信号的,而当信号量减到0时,信号量对象变为无信号。就像图书馆资源一样,一共5本书,每人限取一本,每进来一人,递减一个,当5个人全在时,不允许人再进来。当信号量大于0,说明还有资源可用,可以放线程占用资源。实现资源空间的共享。
对于事件,已经用过。主要是通过创建事件,通过设定手动触发,单个对象等待函数来实现对线程的同步作用。
2015-9-20 艺少
windows下进程与线程的更多相关文章
- windows 下进程与线程的遍历
原文:http://www.cnblogs.com/Apersia/p/6579376.html 在Windows下进程与线程的遍历有好几种方法. 进程与线程的遍历可以使用<TlHelp.h&g ...
- windows下进程与线程剖析
进程与线程的解析 进程:一个正在运行的程序的实例,由两部分组成: 1.一个内核对象,操作系统用它来管理进程.内核对象也是系统保存进程统计信息的地方. 2.一个地址空间,其中包含所有可执行文件或DLL模 ...
- [笔记]linux下和windows下的 创建线程函数
linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include <pthread.h> #define CreateThreadEx(ti ...
- windows 下进程池的操作
在Windows上创建进程是一件很容易的事,但是在管理上就不那么方便了,主要体现在下面几个方面: 1. 各个进程的地址空间是独立的,想要在进程间共享资源比较麻烦 2. 进程间可能相互依赖,在进程间需要 ...
- windows下进程间通信与线程间通信
进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...
- [转] linux 下 进程和线程的区别
1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...
- Linux下进程与线程的区别及查询方法
在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 ...
- 【windows下进程searchfilterhost.exe分析】
searchfilterhost.exe [进程信息] 进程文件: searchfilterhost.exe 进程名称: n/a 英文描述: searchfilterhost.exe is a pro ...
- linux 下 进程和线程的区别
1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...
随机推荐
- Greenplum 函数 gp_dist_random
转载自:https://yq.aliyun.com/articles/7593 函数作用: gp_dist_random('gp_id')本质上就是在所有节点查询gp_id, gp_dist_rand ...
- Hdu CRB and Queries(整体二分)
CRB and Queries Time Limit: 6000 MS Memory Limit: 131072 K Problem Description There are N boys in C ...
- payOrder
parent <script> export default class Parents extends wepy.page { data = { tabdata:{}, //下面要用这里 ...
- 服务器之select
select select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数 解决1024以下客户端时使用select ...
- Tomcat的默认端口问题
0x00 起因 今天看到一个226团队,进群的时候有一个问题问的就是:Tomcat的默认端口是多少? 当时我只想到了8080,等过了不久,有位管理员回复了我是三个默认端口....,马上去翻了下资料,才 ...
- oracle中时间格式时候的大于号是大于和等于的意思
oracle中时间格式时候的大于号是大于和等于的意思
- vue-qr生成下载二维码
安装vue-qr npm install vue-qr --save 生成二维码实列 <vue-qr ref="Qrcode" :text="qrCodeConfi ...
- x2goserver 连接问题
The remote proxy closed the connection while negotiating the session. This may be due to the wrong a ...
- mysql数据库单独移动位置
在新版本中.sym方式已不再支持,最新的方式是使用软链接方式(Windows),官方文档:https://dev.mysql.com/doc/refman/5.7/en/windows-symboli ...
- [转]解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).
Git fetch和git pull的区别: 都可以从远程获取最新版本到本地 1.Git fetch:只是从远程获取最新版本到本地,不会merge(合并) $:git fetch origin mas ...