`
yanMouse
  • 浏览: 39058 次
  • 性别: 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时间占用量却可能是零或非常短暂的现象,那么,上述解释便是原因所在。上述也就是我们在任务管理器的进程选项卡中所能看到的基本信息列。
分享到:
评论

相关推荐

    Windows下查看进程中的线程

    - `PsGetsid.exe`:获取进程的安全标识符(SID),与线程关系不大,但对理解权限和安全设置有帮助。 - `psshutdown.exe`:远程关机或重启,与线程查看无关。 - `pssuspend.exe`:挂起或恢复进程,影响进程内...

    c# window服务多线程实例

    3. 线程通信:可以使用`ManualResetEvent`, `AutoResetEvent`, `Mutex`或`Semaphore`等工具来协调线程间的通信。 4. 线程优先级:根据任务的重要性和紧迫性,可以调整线程的优先级,但要谨慎使用,以免对系统其他...

    Windows下进程间通信

    在Windows操作系统中,进程间通信(Inter-Process Communication, IPC)是实现不同进程之间数据交换和协调工作的重要机制。在给定的标题“Windows下进程间通信”和描述中,涉及了三种主要的IPC技术:内存文件映射、...

    通过WindowAPI实现进程间通讯

    本篇将重点讨论如何利用Window API在WinForm和WPF应用中实现进程间的通信。 首先,WinForm和WPF都是.NET框架下的用户界面库,它们可以利用.NET提供的类库和Window API来实现IPC。在WinForm中,我们可以使用控件如`...

    通过Windows窗口消息实现 QT进程间通信

    Windows窗口消息(Window Messages)是Windows API的一部分,它是进程间通信的一种简单但有效的方式。每个消息都由一个整数值标识(例如,WM_PAINT,WM_MOUSEMOVE等),并通过Windows消息队列进行传递。一个进程可以...

    进程间通信(消息传递机制)

    总之,进程间通信中的消息传递是一种有效且灵活的通信方式,`PostMessage`和`SendMessage`作为其核心组件,分别提供了异步和同步的消息发送方式,满足了不同场景下的需求。理解并熟练运用这些机制是成为一名优秀软件...

    在Windows XP下,建立一个包含两个线程,它们分别显示。

    1. **线程的概念**:线程是程序执行的基本单元,一个进程可以包含多个线程,每个线程都有自己的执行路径。在这个例子中,我们将创建两个线程,一个用于显示北京时间,另一个用于显示伦敦时间。 2. **创建线程**:在...

    Window下跨进程发消息(命名消息)

    这种方式简单易用,能够满足基本的进程间通信需求。 首先,我们要理解什么是命名消息。在Windows API中,`CreateMutex`、`CreateSemaphore`、`CreateEvent`等函数可以创建命名对象,这些对象可以在进程间共享,从而...

    操作系统实验三进程同步

    本次实验旨在帮助学生深入理解进程/线程同步的概念及应用方法,并学会利用进程/线程同步技术解决实际问题。具体目标包括: 1. **理解进程/线程同步原理**:通过实验加深对进程/线程同步的理解,尤其是信号量机制的...

    Window系统进程详细说明

    8. **kernel32.dll**(Windows壳进程):作为Windows核心的一部分,它管理多线程、内存分配和其他系统资源。 9. **lsass.exe**(本地安全权限服务):负责执行Windows的安全策略,包括用户认证、权限管理和密码管理...

    Windows傀儡进程实现C++代码

    为了能够控制傀儡进程,父进程通常会保留其进程和线程句柄,以便后续进行操作,如关闭、等待或发送信号。 在安全方面,傀儡进程的实现需要注意以下几点: 1. 权限控制:确保父进程有足够的权限来创建和管理傀儡进程...

    32位与64位程序间通信,通过共享内存实现

    在IT领域,尤其是在多进程或跨平台编程时,不同架构的程序之间的通信是一个常见的挑战。本文将深入探讨如何使用共享内存这一技术,让32位和64位的程序在Windows环境下实现通信。 共享内存是一种高效的数据交换机制...

    多线程编程三

    单线程编程是指在一个进程中只存在一个执行路径的方式进行编程。这种方式简单明了,易于理解,但在处理高负载或复杂任务时可能会出现性能瓶颈。 #### 示例分析: 在描述中提到的`CSingleThreadDlg`类中的`...

    Console.rar_进程与线程_Visual_C++_

    标题中的"Console.rar_进程与线程_Visual_C++_"表明这是一个关于在控制台应用程序中实现进程和线程通信的示例项目。在这个压缩包中,我们可能找到了一个使用Visual C++编写的源代码,演示了如何在Windows环境下创建...

    在独立线程中显示WPF窗口

    - **线程间通信**:在多线程环境中,数据共享和通信是必需的,可以通过事件、委托或线程同步机制实现。 3. **线程安全问题**: WPF中的UI元素只能在其创建的线程中进行操作,即UI线程。尝试在其他线程中修改UI...

    进程通信(CopyData).zip

    在给定的“进程通信(CopyData).zip”压缩包中,我们关注的是使用`OnCopyData`函数实现的简单且直接的进程通信方式。 `OnCopyData`是Windows API的一部分,它允许一个窗口向另一个窗口发送自定义的数据结构。这个...

    用C#调用Windows API和其它进程通信

    根据给定的信息,本文将详细解释如何利用C#语言调用Windows API来进行进程间通信,具体目标是自动填充网络认证所需的用户名、密码等信息。这一技术对于自动化日常操作、提高工作效率具有重要意义。 ### 设计背景 ...

    vc 创建和结束进程实例

    在VC++(Visual C++)环境中,我们可以通过编程的方式来创建和结束进程。本篇将深入探讨如何使用VC++来实现这一功能。 首先,我们需要了解Windows API中的两个关键函数:CreateProcess和TerminateProcess。`...

    delphi 多线程模拟售票

    通过分析和运行这些代码,你可以看到如何创建和管理线程,以及如何处理线程间的通信和同步问题。 总之,Delphi的多线程功能为我们提供了一种有效的方式去实现并发和并行计算,特别是在模拟售票这类多任务场景下。...

    vowgl.rar_进程与线程_C++_

    标题中的"vowgl.rar_进程与线程_C++_"表明这是一个关于进程与线程的C++编程项目,可能是一个库或示例代码,用于学习和理解如何在C++环境中处理多线程和进程同步。描述提到“实现类似VC中可设断点的编辑窗口”,暗示...

Global site tag (gtag.js) - Google Analytics