rt
解决方案 »
- 怎么做RICHEDIT里面超链接的消息映射?
- WSAEnumProtocol函数的一些疑问
- VC 视图切换与分割
- [开源项目]Matrix自由软件开发联盟 招聘合作者启示
- 高手如何看书(给分求教非技术问题)
- 谁能告诉我switch结构的流程图怎么画?
- ●●●●怎么在Edit中发送Unicode字符的WM_CHAR消息?●●●●
- 如何去掉report样式的CListCtrl的竖直滚动条??
- 有关多进程访问数据库的互斥问题。
- @@@@@@@@@@@@@@@结交朋友,共同进步@@@@@@@@@@@@@@@@
- 真心请叫用VC打包的问题,我做了一个程序,老板叫我给他打个包,可我不会,请高手救救我,要详细步骤啊,我一点不会,多谢,来者有分,详
- 有关《WINDOWS核心编程》的源码的有关问题,敬请作答,在线等待!
进程是执行程序的实例。例如,当你运行记事本程序(Nodepad)时,你就创建了一个用来容纳组成Notepad.exe的代码及其所需调用动态链接库的进程。NT中的每个进程均运行在其专用且受保护的地址空间内。因此,如果你同时运行记事本的两个拷贝,该程序正在使用的数据在各自实例中是彼此独立的。在记事本的一个拷贝中将无法看到该程序的第二个实例打开的数据。我这里以沙箱为例进行阐述。
一个进程就好比一个沙箱。线程就如同沙箱中的孩子们。孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其它沙箱中的其他孩子。因此,每个进程就象一个被保护起来的沙箱。未经许可,无人可以进出。这就是NT中强大的内存保护模型的形成机制,正是由于这种机理,才使NT明显区别于Windows 3.1、Windows 95及Windows 98。
在Windows NT和Windows 2000中,程序、程序实例或者进程对其它进程的执行情况或内存空间施加影响是不可能的。两个进程彼此获得专用数据或内存的唯一途径就是通过协议来共享内存块。这是一种协作策略。
NT运行线程。换言之,线程运行而进程不运行。每个进程包含单一线程,因此,当你运行记事本时,就生成相应的进程沙箱用来容纳代码和数据,而一个线程则被创建用以在指向记事本程序的主要入口起点处开始执行过程。一旦该线程在运行,它就可以创建额外的线程,一个进程的多个线程并行进行调度,这使多线程编程非常复杂,每个线程均共享其所处进程中的专用内存空间。因此,在本张幻灯片的阐述中,进程中所示的三个线程(都具有同时运行的潜在能力)均对进程中的专用数据或地址空间享有同等的访问权限,这样一来,三个线程就必须彼此同步。
进程(Process)控制了各种所有权,掌握了一个程序运行时所能够使用的资源,
比如:虚拟地址空间(memory context),比如程序使用到的句柄表(handle table),程序加载的各种模块(比如DLL)的列表(module list),以及程序使用到的堆(heap)等等。
线程(Thread)用于程序的执行,它才真正代表了程序的执行,而且线程一定运行在进程拥有的虚拟地址空间中,使用进程的句柄表来访问各个系统对象(比如窗口,文件,各种线程同步对象,以及其他的进程和线程,管道(pipe),邮件槽(mailslot)等等),同时线程还将使用进程拥有的其他资源。同时对于每一个线程,还拥有一个独立的堆栈(stack)。
总之,简单的一句话:进程用于给程序的运行提供一个环境,而线程则利用这个环境来完成具体的运行,windows在进行调度操作时,操作的对象也是线程而不是进程,因为执行体是线程而不是进程。
码、数据及其它操作系统资源,如文件、管道以及对该进程可见的同步对象
等。进程包括了一个或多个在进程上下文内运行的线程。线程是操作系统分配CPU 时间的基本实体。线程可以执行应用程序代码的任何部分,包括当前正在被其它线程执行的那些。同一进程的所有线程共享同样的虚拟地址空间、全局变量和操作系统资源。
工厂包括了资源,但要有工人来完成具体的工作