`
yanMouse
  • 浏览: 37846 次
  • 性别: Icon_minigender_2
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

window 进程和线程的关系、通信方式

阅读更多
进程是系统分配资源的单位,每一个进程对应与一个活动的程序,当进程激活时,操作系统就将系统的资源包括内存、I/O和CPU等分配给它,使它执行。  
  线程是CPU分配时间的单位,每一个线程对应于它在进程中的一个函数,也就是内存中的代码段,多个线程执行时CPU会根据它们的优先级分配时间,使它们完成自己的功能。  
  一般来说,进程中至少一个线程,一个主线程和其他线程组成一个进程。多个线程的目的在于分享CPU的时间片,从而完成并行任务。
下面是自己整理的:
线程和进程的比较:
线程是比进程更小的能独立运行的基本单位,通常一个进程都有若干个线程,至少也需要一个线程。
1.调度
线程是调度和分派的基本单位,进程是资源拥有的基本单位。
2.并发性
进程之间可以并发执行,在一个进程中的多个线程之间也可以并发执行。
3.拥有资源
进程是拥有资源的一个独立单元,线程自己不拥有系统资源(也有一点比不可少的资源)但它可以访问其隶属进程的资源。
4.系统开销
创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等,OS所付出的开销显著大于在创建或撤消线程时的开销;进程切换的开销也远大于线程切换的开销。

进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操作系统而言其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
  那进程与线程的区别到底是什么?进程是执行程序的实例。例如,当你运行记事本程序(Nodepad)时,你就创建了一个用来容纳组成Notepad.exe的代码及其所需调用动态链接库的进程。每个进程均运行在其专用且受保护的地址空间内。因此,如果你同时运行记事本的两个拷贝,该程序正在使用的数据在各自实例中是彼此独立的。在记事本的一个拷贝中将无法看到该程序的第二个实例打开的数据。

  以沙箱为例进行阐述。一个进程就好比一个沙箱。线程就如同沙箱中的孩子们。孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁
和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其它沙箱中的其他孩子。因此,每个进程就象一个被保护起来的沙箱。未经许可,无人可以进出。

  实际上线程运行而进程不运行。两个进程彼此获得专用数据或内存的唯一途径就是通过协议来共享内存块。这是一种协作策略。下面让我们分析一下任务管理器里的进程选项卡。

  这里的进程是指一系列进程,这些进程是由它们所运行的可执行程序实例来识别的,这就是进程选项卡中的第一列给出了映射名称的原因。请注意,这里并没有进程名称列。进程并不拥有独立于其所归属实例的映射名称。换言之
,如果你运行5个记事本拷贝,你将会看到5个称为Notepad.exe的进程。它们是如何彼此区别的呢?其中一种方式是通过它们的进程ID,因为每个进程都拥有其独一无二的编码。该进程ID由Windows NT或Windows 2000生成,并可以循环使用。因此,进程ID将不会越编越大,它们能够得到循环利用。第三列是被进程中的线程所占用的CPU时间百分比。它不是CPU的编号,而是被进程占用的CPU时间百分比。此时我的系统基本上是空闲的。尽管系统看上去每一秒左右都只使用一小部分CPU时间,但该系统空闲进程仍旧耗用了大约99%的CPU时间。

  第四列,CPU时间,是CPU被进程中的线程累计占用的小时、分钟及秒数。请注意,我对进程中的线程使用占用一词。这并不一定意味着那就是进程已耗用的CPU时间总和,因为,如我们一会儿将看到的,NT计时的方式是,当特定的时钟间隔激发时,无论谁恰巧处于当前的线程中,它都将计算到CPU周期之内。通常情况下,在大多数NT系统中,时钟以10毫秒的间隔运行。每10毫秒NT的心脏就跳动一下。有一些驱动程序代码片段运行并显示谁是当前的线程。让我们将CPU时间的最后10毫秒记在它的帐上。因此,如果一个线程开始运行,并在持续运行8毫秒后完成,接着,第二个线程开始运行并持续了2毫秒,这时,时钟激发,请猜一猜这整整10毫秒的时钟周期到底记在了哪个线程的帐上?答案是第二个线程。因此,NT中存在一些固有的不准确性,而NT恰是以这种方式进行计时,实际情况也如是,大多数32位操作系统中都存在一个基于间隔的计时机制。请记住这一点,因为,有时当你观察线程所耗用的CPU总和时,会出现尽管该线程或许看上去已运行过数十万次,但其CPU时间占用量却可能是零或非常短暂的现象,那么,上述解释便是原因所在。上述也就是我们在任务管理器的进程选项卡中所能看到的基本信息列。
分享到:
评论

相关推荐

    吕鑫:【C++语法与数据结构第25天】【第3堂课】多线程与TCP通讯流程

    1、讲解和演示通过多线程技术,实现接收端和发送端在同一进程内同时运行; 2、讲解和演示TCP通讯流程;

    操作系统教程---好书

    介绍进程的顺序性和并发性,进程的协作和竞争,以进程交互、进程控制、进程通信和进程死锁问题为重点,讨论并发程序设计有关技术和各种进程互斥、同步、通信机制和工具。最后介绍了Windows2000/XP 的同步和通信机制...

    操作系统教程 孙钟秀主编

    介绍进程的顺序性和并发性,进程的协作和竞争,以进程交互、进程控制、进程通信和进程死锁问题为重点,讨论并发程序设计有关技术和各种进程互斥、同步、通信机制和工具。最后介绍了Windows2000/XP 的同步和通信机制...

    unix平台下c语言高级编程指南

    内容简介回到顶部↑ ...14.2 make和makefile的关系 14.3 makefile规则 14.4 伪指令 14.5 make命令行参数 第15章 版本控制 15.1 版本控制概念 15.2 源代码控制系统SCCS 15.3 RCS使用方法 15.4 并发版本控制CVS

    UNIX操作系统教程 张红光

    Window292 14.1.1X-Window的特征292 14.1.2X-Window的工作方式293 14.1.3X-Window的组成部件294 14.1.4X-Window编程环境介绍295 14.2数据检索加工工具awk296 14.2.1awk基本描述296 14.2.2awk中的记录和字段297 ...

    基于 C语言 生产者消费者问题【100010806】

    实验目的 使用进程模拟消费者生产者进程,掌握进程之间的通信方法,区分在不同操作系统下进程通信的不同之处,并熟练使用信号量的创建删除等一系列...生产者和消费者用进程模拟(不能用线程) Linux/Window 下都需要做

    精通WindowsAPI 函数 接口 编程实例

    7.3 等待进程和线程的执行完成 209 第8章 服务 210 8.1 基本概念 210 8.1.1 服务控制器(SCM) 211 8.1.2 服务程序 211 8.1.3 服务控制管理程序 211 8.1.4 系统服务管理工具 211 8.1.5 服务的属性 ...

    Windows编程循序渐进(清晰完整版)3

    第14章,进程间通信:介绍共享内存、管道等进程间通信方式的原理与实现方法。.. 第15章,线程同步:介绍多种线程同步技术,包括使用内核对象实现线程同步。 第16章,动态链接库:介绍DLL的基本原理,包括TLS机制。...

    基于javatcpsocket通信的拆包和装包源码-java:Java

    Window内存管理方式:段存储,页存储,段页存储 空闲内存管理:使用位图的存储管理,使用链表的存储管理 空闲内存的四种分配算法:首次适应法,下次匹配法,最佳适应法,最坏适应法 cpu段式管理:段式管理的基本原理...

    Linux高级编程(无加密版)

    第11章 进程间通信 第12章 PCI 第13章 中断和中断处理 第14章 设备驱动程序 第15章 文件系统 第16章 网络系统 第17章 系统内核机制 第四篇 Linux系统高级编程 第18章 Linux内核模块编程 第19章 有关进程通信的编程 ...

    3-2-2-基于AM57x的IPC例程开发手册.pdf

    IPC(Inter-Processor Communication)提供了一个与处理器无关的API,可用于多处理器环境中的核间通信、与同一处理器上的其他线程的通信(进程间)和与外围设备(设备间)的通信。

    WINDOWS CE 6.0开发者参考.part04.rar

    第8章 模块、进程和线程 第9章 windows ce文件系统 第10章 注册表 第11章 windows ce数据库 第12章 通知 第三部分 高级windows ce 第13章 windows ce网络 第14章 设备间通信 第15章 系统程序设计 第16章 串行通信 第...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    7.6 POSIX线程的优先级和调度策略 180 7.6.1 POSIX的线程调度策略 181 7.6.2 POSIX Thread优先级 181 7.7 小结 181 第8章 POSIX Socket API:面向连接的通信 183 8.1 Echo Socket示例应用 183 8.1.1 Echo ...

    精通qt4编程(源代码)

    \第17章 进程与进程间通信 421 \17.1 使用QProcess 421 \17.2 Linux进程间通信 423 \17.3 新型进程间通信——D-Bus 425 \17.3.1 D-Bus简介 425 \17.3.2 安装QtDBus模块 427 \17.3.3 接口与适配器 429 \17.3.4 QtDBus...

    精通Qt4编程(第二版)源代码

    \第17章 进程与进程间通信 421 \17.1 使用QProcess 421 \17.2 Linux进程间通信 423 \17.3 新型进程间通信——D-Bus 425 \17.3.1 D-Bus简介 425 \17.3.2 安装QtDBus模块 427 \17.3.3 接口与适配器 429 \17.3.4...

    Linux程序设计 第4版.haozip01

    13.5 父进程和子进程 451 13.5.1 管道关闭后的读操作 453 13.5.2 把管道用作标准输入和标准输出 454 13.6 命名管道:fifo 456 13.6.1 访问fifo文件 458 13.6.2 高级主题:使用fifo的客户/服务器应用程序 464 ...

    Linux程序设计 第4版.haozip02

    13.5 父进程和子进程 451 13.5.1 管道关闭后的读操作 453 13.5.2 把管道用作标准输入和标准输出 454 13.6 命名管道:fifo 456 13.6.1 访问fifo文件 458 13.6.2 高级主题:使用fifo的客户/服务器应用程序 464 ...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    API之网络函数---整理网络函数及功能

    其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

Global site tag (gtag.js) - Google Analytics