欢迎来到天天文库
浏览记录
ID:59240866
大小:546.50 KB
页数:39页
时间:2020-09-26
《网络编程 多线程ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、多线程程序、进程和线程--程序和进程程序是计算机指令的集合,它以文件的形式存储在磁盘上。进程:通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。进程是资源申请、调度和独立运行的单位进程主要由两个部分组成:1、操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。2、地址空间。它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。程序、进程和线程--进程地址空间系统赋予每个进程独立的虚拟地址空间。对于32位进程来说,这个地址空间是4GB。每个进程有它自己的私有地址空间。进程A可能有一个存放在它
2、的地址空间中的数据结构,地址是0x12345678,进程B有一个完全不同的数据结构存放在它的地址空间中,地址是0x12345678。当进程A中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程A的数据结构。当进程B中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程B的数据结构。进程A中运行的线程不能访问进程B的地址空间中的数据结构,反之亦然。程序、进程和线程--进程地址空间4GB是虚拟的地址空间,只是内存地址的一个范围。2GB是内核分区,供内核码、设备驱动程序、设备I/O高速缓冲、非页面内存池的分配和进程页面表等使用,2GB是用户
3、分区,这个分区是进程的私有地址空间所在的地方。一个进程不能读取、写入、或者以任何方式访问驻留在该分区中的另一个进程的数据。对于所有应用程序来说,该分区是维护进程的大部分数据的地方。进程与线程进程是不活泼的进程从来不执行任何东西,它只是线程的容器。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。单个进程可能包含若干个线程,这些线程都“同时”执行进程地址空间中的代码。每个进程至少拥有一个线程,来执行进程的地址空间中的代码。当创建一个进程时,操作系统会自动创建这个进程的第一个线程,称为主线程。此后,该线程可以创建其他的线
4、程。主线程即执行main()函数或Winmain()函数的线程,我们可以把main()函数或Winmain()函数看作主线程的进入点函数。引入多线程技术的动机进程切换的开销大频繁的进程调度将耗费大量处理器时间进程之间通信的代价大每次通信均要涉及通信进程之间以及通信进程与操作系统之间的切换。?不适合并行计算和分布并行计算的要求对于多处理器和分布式的计算环境来说,进程之间大量频繁的通信和切换,会大大降低并行度。不适合客户/服务器计算的要求对于C/S结构来说,那些需要频繁输入输出并同时大量计算的服务器进程(如数据库服务器、事务监督程序)很难体现效率。线程线程由以下部分组成:线程
5、的内核对象操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。线程堆栈用于维护线程在执行代码时需要的所有参数和局部变量。线程上下文(一组CPU寄存器状态,特别是指令指针寄存器和堆栈指针寄存器)指令寄存器和堆栈寄存器记录的地址都用于标志拥有线程的进程地址空间中的内存线程内存映象和内容线程存在于进程之中,除了堆栈和CPU状态外,全部数据是共享的线程当创建线程时,系统创建一个线程内核对象该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。线程总是在某个进程环境中创建系统从进
6、程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和所有其他兄弟线程的堆栈。这使得单个进程中的多个线程确实能够非常容易地互相通信。线程的开销比进程小线程只有一个内核对象和一个堆栈,保留的记录很少,因此所需内存也很少。在编程中经常采用多线程来解决编程问题,而尽量避免创建新的进程。线程运行--分时操作系统为每一个运行线程安排一定的CPU时间——时间片。系统通过一种循环的方式为线程提供时间片,线程在自己的时间内运行,因时间片相当短,因此,给用户的感觉,就好像线程是同时运行的一样。如果计算机
7、拥有多个CPU,线程就能真正意义上同时运行了。单线程程序与多线程程序单线程程序多线程程序一个线程两个线程Win32APIWin32API提供了一系列处理线程的函数接口,来向应用程序提供多线程的功能用Win32API直接编写应用程序要求程序员对Windows操作系统有一定的了解直接用Win32API编写的应用程序,程序的执行代码小,运行效率高MFC用类库的方式将Win32API进行封装,以类的方式提供给开发者提供了对多线程的支持MFC对同步对象作了封装MFC具有快速、简捷、功能强大等特点CreateThread函数在一个已经运行
此文档下载收益归作者所有