华北电力大学网络编程5-不同IO模式下的处理方法

华北电力大学网络编程5-不同IO模式下的处理方法

ID:41861471

大小:2.52 MB

页数:54页

时间:2019-09-03

华北电力大学网络编程5-不同IO模式下的处理方法_第1页
华北电力大学网络编程5-不同IO模式下的处理方法_第2页
华北电力大学网络编程5-不同IO模式下的处理方法_第3页
华北电力大学网络编程5-不同IO模式下的处理方法_第4页
华北电力大学网络编程5-不同IO模式下的处理方法_第5页
资源描述:

《华北电力大学网络编程5-不同IO模式下的处理方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、不同I/O模式下的处理方法阻塞模式与非阻塞模式多进程与多线程I/O阻塞模式的多线程网络编程方法I/O非阻塞模式的异步处理模型第5章5.1阻塞模式与非阻塞模式Winsock在进行I/O操作的时候,可以使用两种工作模式:一种是阻塞模式,也称同步模式;另一种是非阻塞模式,也称异步模式。5.1.1阻塞模式及其优缺点阻塞模式下,在I/O操作完成之前,不会立即交出CPU的控制权。阻塞套接字的I/O操作确定,容易编程;以下情况性能低下:需要建立多个套接字连接来为多个客户机服务的时候,或在数据的收发量不均匀的时候,或在I

2、/O的时间不确定的时候。5.1.2非阻塞模式及其优缺点非阻塞模式下,当进程调用了一个Winsock的I/O函数时,无论I/O操作是否能够完成,执行操作的Winsock函数都会立即返回调用它的程序。非阻塞模式下的函数调用会频繁地返回错误,所以在任何时候,都应做好“失败”的准备,并仔细检查返回代码。5.2多进程与多线程从操作系统基本运行单元角度来看,并发的实现方式主要有两种:一种是多进程并发一种是多线程并发原则上一个CPU只能分配给一个进程,同时运行多个进程,就必须使用并发技术。操作系统一般采用“时间片轮转进

3、程调度算法”实现并发。5.2.1什么是多进程5.2.2什么是多线程多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。并行运行的效率显然高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。5.2.3多进程和多线程的关系(1)线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间。线程是进程内部的一个执行单元,是CPU调度和分派的基本单位。每一个进程至少有一个主线程,它无需由用户去主动创建,是由系统自动创建的。5.2.3多进程和多线程的关系(2)进程和线程二者差异,如下

4、几个方面:首先,进程在执行过程中拥有独立的内存单元,而多个线程共享内存。其次,线程的划分尺度小于进程。第三,线程的执行效率比进程要高。最后,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。问题的提出新建一个基于对话框的应用程序SingleThread,在主对话框添加一个按钮,标题为“延时6秒”,添加按钮的响应函数,代码如下:voidCSingleThreadDlg::OnSleepSixSecond(){Sleep(6000);//延时6秒}编译

5、并运行应用程序,单击“延时6秒”按钮,这6秒期间程序就象“死机”一样,不在响应其它消息。5.2.4网络编程采用多线程机制的重要性服务器端客户端图5-1多线程服务器与多个客户机通信Win32API对多线程编程的支持Win32提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作。下面将选取其中的一些重要函数进行说明。1、HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_S

6、TART_ROUTINElpStartAddress,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);如果创建成功则返回线程的句柄,否则返回NULL。该结构决定了线程的安全属性,一般置为NULL该参数返回所创建线程的ID指定了线程的堆栈深度,一般都设置为0表示新线程开始执行时代码所在函数的地址线程函数的参数如果该参数为0,线程在被创建后就会立即开始执行;如果该参数为CREATE_SUSPENDED,则系统产生线程后,该线程处于挂起状态,并

7、不马上执行,直至函数ResumeThread被调用2、DWORDSuspendThread(HANDLEhThread);该函数用于挂起指定的线程,如果函数执行成功,则线程的执行被终止。3、DWORDResumeThread(HANDLEhThread);该函数用于结束线程的挂起状态,执行线程。4、VOIDExitThread(DWORDdwExitCode);该函数用于线程终结自身的执行,主要在线程的执行函数中被调用。其中参数dwExitCode用来设置线程的退出码。5、BOOLTerminateThr

8、ead(HANDLEhThread,DWORDdwExitCode);一般情况下,线程运行结束之后,线程函数正常返回,但是应用程序可以调用TerminateThread强行终止某一线程的执行。各参数含义如下:hThread:将被终结的线程的句柄;dwExitCode:用于指定线程的退出码。使用TerminateThread()终止某个线程的执行是不安全的,可能会引起系统不稳定;虽然该函数立即终止线程的执行,但并不释放线程所占用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。