问题
windows核心编程中的作业请教几个问题1 windows的作业可以包含几个进程,对吗?
  作业和进程有什么区别呀?什么时候在编程时候用到作业?2 纤程和线程有什么区别呀?什么时候在编程时候用到纤程?求高手回答,越详细越好

解决方案 »

  1.   

    Job   Objects  
      A   job   object   allows   groups   of   processes   to   be   managed   as   a   unit.   Job   objects   are   namable,   securable,   sharable   objects   that   control   attributes   of   the   processes   associated   with   them.   Operations   performed   on   the   job   object   affect   all   processes   associated   with   the   job   object.    
       
      以上来自MSDN。这样,多个进程可以作为一组进程用一个Job   Object来管理。
      

  2.   

    进程通常被定义为一个正在运行的程序的实例。  
       
      进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。单个进程可能包含若干个线程,所有这些线程都“同时”执行进程地址空间中的代码。  
      线程是cpu分配的基本单位。  
       
      纤程是以用户方式代码来实现的,内核并不知道纤程,并且它们是根据用户定义的算法来调度的。由于你定义了纤程的调度算法,因此,就内核而言,纤程采用非抢占式调度方式。  
      需要了解的下一个问题是,单线程可以包含一个或多个纤程。就内核而言,线程是抢占调  
      度的,是正在执行的代码。然而,线程每次执行一个纤程的代码—你决定究竟执行哪个纤程   
      

  3.   

    作业和进程不同。
    进程简单说就是一个可进行文件在运行时的一个实例。
    作业可以是一系列相关的进程,他们可能是共同完成一个任务等为什么需要作业呢?
    比如你用VC编译一个工程,你启动CL.EXE,然后CL.EXE可能会启动其他进程来一起完成编译
    但有可能你想停止编译,这个时候你必须停止CL.EXE 以及它的所有子进程,但是Windows没有保存进程间的关系,所以无法自动判断所需要停止的进程。作业就是用来解决和管理以上类似问题,一个进程属于一个作业,它的子进程也属于这个作业,结束作业就解决以上问题了。
      

  4.   

    Job是一个或多个Process的集合,可以统一进行管理,参考CreateJobObject、AssignProcessToJobObject、SetInformationJobObject等函数。Fiber类似于线程,可以用多个Fiber来完成不同任务,Fiber比Thread简单,由程序自己来进行调度,同一Thread在同一时间只能有一个Fiber在运行。