zoukankan      html  css  js  c++  java
  • 命名管道

    "命名管道"或"命名管线"(Named Pipes)是一种简单的进程间通信(I P C)机制,Microsoft Windows NT,Windows 2000,Windows 95以及Windows 98均提供了对它的支持(但不包括Windows CE).命名管道可在同一台计算机的不同进程之间,或在跨越一个网络的不同计算机的不同进程之间,支持可靠的,单向或双向的数据通信.用命名管道来设计应用程序实际非常简单,并不需要事先深入掌握基层网络传送协议(如T C P / I P或I P X)的知识.这是由于命名管道利用了微软网络提供者(M S N P)重定向器,通过一个网络,在各进程间建立通信.这样一来,应用程序便不必关心网络协议的细节.之所以要用命名管道作为自己的网络通信方案,一项重要的原因是它们充分利用了Windows NT及Windows 2000内建的安全特性.

    这里有一个可采纳命令管道的例子.假定我们要开发一个数据管理系统,只允许一个指定的用户组进行操作.想像在自己的办公室中,有一部计算机,其中保存着公司的秘密.我们要求只有公司的管理人员,才能访问及处理这些秘密.假定在自己的工作站机器上,公司内的每名员工都可看到网络上的这台计算机.然而,我们并不希望普通员工取得对机密材料的访问权.在这种情况下,命名管道可发挥出很好的作用,因为我们可开发一个服务器应用程序,令其以来自客户机的请求为准,对公司的秘密进行安全操作.服务器可将客户访问限制在管理人员身上,用Windows NT或新版Windows 2000自带的安全机制,便可非常轻松地做到这一点.

    在此要记住的一个重点是,将命名管道作为一种网络编程方案使用时,它实际上建立一个简单的客户机/服务器数据通信体系,可在其中可靠地传输数据

    -----
    进程间通信     Interprocess   Communication  
       
      Interprocess   Communication   进程间通信(IPC)   进程间通信(IPC)是运行在多任务操作系统中或联网计算机上的程序和进程使用的一组技术。IPC分为两种类型:  
       
      口本地过程调用(LPC)LPC在多任务操作系统中使用,它们允许并发运行的任务能彼此对话。LPC能共享内存空间、同步任务并相互发送消息。  
       
      □远程过程调用(RPC)   RPC类似于LPC,但却工作在网络上。RPC首先出现在运行UNIX操作系统的SUN微系统公司和HP公司的计算机上。  
       
      程序使用IPC的一个好处是,能有效地利用其它程序或计算机的过程。客户机/服务器模式就利用了RPC。客户在他自己的机器上执行部分任务,但还要依赖服务器提供的后端文件服务。RPC为客户提供通信机制,以使服务请求发送到后端服务器。如果把一个客户机/服务器应用程序想象成为一个被分拆在前端和后端系统之间的程序,则RPC   就能被看作是在网络上重新集成它们的部件,RPC有时称作耦合(coupling)机制。  
       
      UNIX中正常的进程间通信机制是管道(pipe),而套节字(socket)是工作在多个网络上的进程间通信的机制。80年代初,当TCP/IP协议栈被集成到BerkeleyUNIX中时,它就成为UNIX的一部分。这项工程是由DARPA投资的,若想详细了解请参看“传输控制协议/Internet协议”讨论。  
       
      在OS/2保护模式中,程序运行在属于它自己的一片内存保护区,或能在诸如IBM   LAN   Server或Microsoft   LAN   Manager一样的网络上通讯。保护模式禁止一个程序破坏其它程序所用的内存区。如果程序需要相互通信或共享内存区,则可使用这里描述的IPC特性。  
       
      □共享内存(shared   memory)   借助使用共享内存,进程能改变内存中其他进程也能读的值。这个内存空间变成一种公告牌,在公告牌中进程能公告状态信息和需要在进程间共享或传递的数据。共享内存总是一片指定区域,这个区域通常是在存放正常程序数据区域的外面。  
       
      □队列(Queues)   一个IPC队列是一个结构化的排序内存段表,这个队列就是进程存放或检索数据的地方。队列的顺序可有多种,包括先进先出(FIFU)和后进先出(LIFO)。  
       
      □信号标(Semaphores)信号标为那些访问相同资源的进程提供一个同步机制。注意信号标不是用于传输数据,它只是简单地协调对共享资源的访问。信号标可以包含一个增加或减小的值,用以指出什么资源正被访问和访问的次数。  
       
      □管道(Pipes)   一个管道通过交换消息为进程间通讯提供了一种途径。而命名管道(named   pipes)为运行在不同计算机系统上的多个进程提供了一种在网络上通信的方法。邮槽(Mai1   slots)是一个存储转发消息传递系统,它不需要站点之间相互同步。命名管道和邮槽是OS/2的扩展,仅仅用在IBM   LAN   Server和Microsoft   LAN   Manager环境中。  
       
      相关条目:Application   Program   Interface应用程序编程接口;Remote   Procedure   Calls远程过程调用。  

    ------
    什么是“托管”(Managed)。托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完全可以把“托管”视为“.NET”。那么什么是“通用语言运行时”?通用语言运行时是.NET框架应用程序的执行引挚。它提供了许多服务,其中包括:代码管理(装入和执行)、类型安全性验证、元数据(高级类型信息)访问、为管理对象管理内存、管理代码,COM对象和预生成的DLLs(非管理代码和数据)的交互操作性、对开发人员服务的支持等等。  
    也就是说,使用托管意味着,我们的代码可以被CLR所管理,并能开发出具有最新特性如垃圾自动收集、程序间相互访问等的.NET框架应用程序。  
          由托管概念所引发的C++应用程序包括托管代码、托管数据和托管类三个组成部分。    
          (1) 托管代码:.Net环境提供了许多核心的运行(RUNTIME)服务,比如异常处理和安全策略。为了能使用这些服务,必须要给运行环境提供一些信息代码(元数据),这种代码就是托管代码。所有的C#、VB.NET、JScript.NET默认时都是托管的,但Visual C++默认时不是托管的,必须在编译器中使用命令行选项(/CLR)才能产生托管代码。   
          (2)托管数据:与托管代码密切相关的是托管数据。托管数据是由公共语言运行的垃圾回收器进行分配和释放的数据。默认情况下,C#、Visual     Basic     和     JScript.NET     数据是托管数据。不过,通过使用特殊的关键字,C#     数据可以被标记为非托管数据。Visual     C++数据在默认情况下是非托管数据,即使在使用     /CLR     开关时也不是托管的。   
          (3)托管类:尽管Visual     C++数据在默认情况下是非托管数据,但是在使用C++的托管扩展时,可以使用“__gc”关键字将类标记为托管类。就像该名称所显示的那样,它表示类实例的内存由垃圾回收器管理。另外,一个托管类也完全可以成为     .NET     框架的成员,由此可以带来的好处是,它可以与其他语言编写的类正确地进行相互操作,如托管的C++类可以从Visual     Basic类继承等。但同时也有一些限制,如托管类只能从一个基类继承等。需要说明的是,在托管C++应用程序中既可使用托管类也可以使用非托管类。这里的非托管类不是指标准C++类,而是使用托管C++语言中的__nogc关键字的类。 

    ------
    应用程序域

      应用程序域(通常简称为AppDomain)可以视为一种轻量级进程。一个Windows进程内可以包含多个AppDomain。AppDomain这个概念的提出是为了实现在一个物理服务器中承载多个应用程序,并且这些应用能够相互独立。ASP.NET中利用AppDomain在同一个进程内承载了多组Web应用程序就是一个例子。实际上微软曾进行过在单一进程内承载多达1000个简单Web应用程序的压力测试。

      使用AppDomain所获得的性能优势主要体现在两方面:

      ·创建AppDomain所需要的系统资源比创建一个Windows进程更少。

      ·同一个Windows进程内所承载的AppDomain之间可以互相共享资源,如CLR、基本.NET类型、地址空间以及线程。

      而各个AppDomain之间的独立性体现为以下这些特征:

      ·一个AppDomain可以独立于其他的AppDomain而被卸载。

      ·一个AppDomain无法访问其他AppDomain的程序集和对象。

      ·若没有发生跨边界的异常抛出,一个AppDomain拥有自己独立的异常管理策略。这意味着一个AppDomain内出现问题不会影响到同一个进程内中的其他AppDomain。

      ·每个AppDomain可以分别定义独自的程序集代码访问安全策略。

      ·每个AppDomain可以分别定义独自的规则以便CLR在加载前定位程序集所在位置。

      可以看出应用程序域是进程中的一个子单元,不过在.NET中还存在一个比应用程序域还要细粒度的单元——.NET上下文(Context)。

    应用程序域,由   AppDomain   对象来表示,为执行托管代码提供隔离、卸载和安全边界。  
       
      多个应用程序域可以在一个进程中运行;但是,在应用程序域和线程之间没有一对一的关联。多个线程可以属于一个应用程序域,尽管给定的线程并不局限于一个应用程序域,但在任何给定时间,线程都在一个应用程序域中执行。  
       
      应用程序域通过使用   CreateDomain   方法来创建。AppDomain   实例用于加载和执行程序集   (Assembly)。当不再使用   AppDomain   时,可以将它卸载。  
       
      其实就是动态加载代码用的

    什么是应用程序域AppDomain?
    应用程序域(通常为 AppDomain)是一个用于隔离应用程序的虚拟进程。在同一应用程序范围内(换句话说,以应用程序入口点开头的对象激活序列中的任何位置)创建的所有对象都创建在同一应用程序域中。多个应用程序域可以存在于单个操作系统进程中,这使它们成为应用程序隔离的轻量方法。 w3sky
    操作系统进程通过提供一个独特的内存地址空间来提供隔离。虽然这很有效,但成本很高,而且不能扩展到大型 Web 服务器所需的数目。另一方面,公共语言运行库通过管理运行在应用程序域中的代码的内存使用来强制应用程序隔离。这可确保它不会访问域边界以外的内存。注意只有类型安全代码才能以这种方式进行管理(运行库在不安全代码加载到应用程序域中时无法保证隔离)很重要。

  • 相关阅读:
    165. Compare Version Numbers
    164. Maximum Gap
    3、桶排序
    162. Find Peak Element
    160. Intersection of Two Linked Lists
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    Linux/Unix系统编程手册 第二章:基本概念
    Linux/Unix系统编程手册 第一章:历史和标准
  • 原文地址:https://www.cnblogs.com/gsk99/p/1566149.html
Copyright © 2011-2022 走看看