实习一多进程线程实现快速排序课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《实习一多进程线程实现快速排序课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实习 进程 线程 实现 快速 排序 课件
- 资源描述:
-
1、操作系统实习习题课张旦峰操作系统实验室2/41实习一:压力测试实习二、三:并发控制实习四:多进程(线程)快速排序实习五:快速文件系统3/41要求编写一组小程序测试你的Windows 2K/XP系统创建进程和线程的能力步骤压力测试压力测试:创建尽可能多的进程和线程,得到这个数目的极限,进程和线程启动后可以进入睡眠状态或者死循环,考虑这两种情况对结果的影响性能测试性能测试:测试系统创建单个进程和线程的平均速率以及速率变化情况,并且对不同的优先级进行测试,研究优先级对其影响4/41BOOL CreateProces(LPCTSTR lpApplicationName,LPTSTR lpCommand
2、Line,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCTSTR lpCurrentDirectory,LPSTARTUPINFO lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation);5/41BOOL CreateThread(LPSECURITY_ATTRIBUTES lpThr
3、eadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);6/41睡眠状态睡眠状态挂起操作在父进程通过将dwCreationFlags设置为CREATE_SUSPENDED选项实现死循环死循环父进程产生子进程后子进程立即执行,并且执行一个死循环程序 线程线程vs进程进程分别使用CreateProcess和CreateThread7/41CreateProcess(szAppName,szAp
4、pName,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)CreateProcess(szAppName,szAppName,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi)CreateThread(NULL,0,ThreadFunc,NULL,0,&dwThreadId)CreateThread(NULL,0,ThreadFunc,NULL,CREATE_SUSPENED,&dwThreadId)8/41进程子进程挂起:第一次:3607第二次:3607第三次:3610平均:3608(依赖于具体机器)死循环未知(非
5、常慢,8个小时1000多个进程)线程子线程挂起:第一次:2031第二次:2031第三次:2031平均:2031(操作系统限制)死循环同样非常慢(2031)9/41挂起vs死循环挂起创建速度相对要快,容易达到上限死循环死循环:每个子进程都持续占用cpu,cpu利用率持续为100%。创建的速度非常慢。很难达到上限进程vs线程对于挂起的情况,线程产生速度比进程快很多线程上限是固定的,受到每个进程能创建线程的上限限制。而进程数上限不确定,受限于系统性能对于死循环的情况类似,但是创建线程要比进程的情况要快10/41使用不同优先级测试创建进程、线程函数的dwCreationFlags参数指定优先级:REA
6、LTIME_PRIORITY:最高优先级 HIGH_PRIORITY_CLASS:高优先级。例如任务管理器 NORMAL_PRIORITY_CLASS:普通优先级,默认设置 IDLE_PRIORITY_CLASS:最低优先级,例如屏保11/41CreateProcess(szAppName,szAppName,NULL,NULL,FALSE,REALTIME_PRIORITY,NULL,NULL,&si,&pi)CreateProcess(szAppName,szAppName,NULL,NULL,FALSE,HIGH_PRIORITY_CLASS,NULL,NULL,&si,&pi)Crea
7、teProcess(szAppName,szAppName,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi)CreateProcess(szAppName,szAppName,NULL,NULL,FALSE,IDLE_PRIORITY_CLASS,NULL,NULL,&si,&pi)CreateThread()12/4113/4114/41由于数据的随机性,以及系统状态的不稳定性,并不能看出不同优先级之间明显的差异随着创建进程、线程数目的增多,平均创建时间总体来说越来越长创建速度与系统负荷有关15/41在对进程创建进行计时的过程中
8、,有几种计时方法,哪种比较合理?Time(秒级)clock、timeGetTime、QueryPerformanceCounter(毫秒级)QueryPerformanceCounter精读最高,但开销可能会偏大,按应用场景而定在创建进程或线程的过程中系统需要做那些特殊处理(比如对调度和中断的处理),为什么?进程创建需要中断,是系统的调度单位。线程不需要16/41线程和进程的区别实验数据依赖于机器以及运行的环境,没有标准答案数据本身并不重要,重要的是获得数据,分析数据的能力(图表!)对比实验(关闭防火墙,关闭QQ,)17/41 互斥量操作HANDLE CreateMutex(LPSECURIT
9、Y_ATTRIBUTES lpMutexAttributes,BOOL bInitialOwner,LPCSTR lpName);HANDLE OpenMutex(DWORD dwDesiredAccess,BOOL bInheritHandle,LPCSTR lpName);BOOL ReleaseMutex(HANDLE hMutex);18/41 信号量操作BOOL CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,LONG lInitialCount,LONG lMaximumCount,LPCSTR lpName)
10、;HANDLE OpenSemaphore(DWORD dwDesiredAccess,BOOL bInheritHandle,LPCSTR lpName);BOOL ReleaseSemaphore(HANDLE hSemaphore,LONG lReleaseCount,LPLONG lpPreviousCount);19/41互斥量、信号量请求DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);DWORD WaitForMultipleObjects(DWORD nCount,const HANDLE*lpHand
11、les,BOOL bWaitAll,DWORD dwMilliseconds);20/41 临界区操作void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);void EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);void LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);21/41要求在Windows 2000/XP环境下,编程实现多生产者P-消费者C问题对某一P有需求的全
展开阅读全文