欢迎来到天天文库
浏览记录
ID:51588202
大小:78.00 KB
页数:34页
时间:2020-03-24
《实验7 多线程编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验7WinSock多线程编程7.1WinSock为什么需要多线程编程7.1.1WinSock的两种输入输出模式如前所述,WinSock在进行输入输出的时候,可以使用两种工作模式。即“阻塞”模式(BlockingMode)或“非阻塞”模式,又称为同步模式或异步模式。工作在“阻塞”模式的套接字称为阻塞套接字,工作在“非阻塞”模式下的套接字称为非阻塞套接字。阻塞模式在I/O操作完成前不会立即交出CPU控制权返回,独占的运行方式使整个进程处于阻塞的等待状态。采用阻塞进程的单进程服务器不能很好的同时为多个客户机服务。非阻塞模式时,进程调用并执行I/
2、O时,无论操作是否完成,函数会立即返回。7.1.2两种模式的优缺点及解决方法“阻塞”与“非阻塞”模式各有其优点和缺点。阻塞套接字的I/O操作工作情况比较确定,无非是调用、等待、返回。大部分情况下,I/O操作都能成功地完成,不过就是花费了等待的时间。因而比较容易使用,容易编程;但在应付诸如需要建立多个套接字连接来为多个客户服务的时候,或在数据的收发量不均匀的时候,或在输入输出的时间不确定的时候,却显得性能低下,甚至无能为力。使用非阻塞套接字,需要编写更多的代码,因为必须恰当地把握调用I/O函数的时机,尽量减少无功而返的调用,还必须详加分析每个
3、Winsock调用中收到的WSAEWOULDBLOCK错误,采取相应的对策,这种I/O操作的随机性使得非阻塞套接字显得难于操作。所以,必须采取一些适当的对策,克服这两种模式的缺点,让阻塞和非阻塞套接字能够满足各种场合的要求。对于非阻塞的套接字工作模式,进一步引入了五种“套接字I/O模型”;对于阻塞的套接字工作模式,则进一步引入了多线程机制。7.2Win32操作系统下的多进程多线程机制7.2.1Win32OS是单用户多任务的操作系统最早的DOS是单用户单任务的。后来发展到图形界面的Windows,发展到Windows95,Windows98,
4、就都支持多任务了,从WindowsNT起,Windows操作系统更是发展成了一个真正的抢占式多任务操作系统。7.2.2Win32OS是支持多线程的操作系统Win32操作系统还支持同一进程的多线程。在一个Windows进程内,可以包含多个线程。一个线程(thread)是进程内的一条执行路径,具体地说,是一个应用程序中的一条可执行路径,往往是应用程序中的一个或多个函数。一个进程中至少要有一个线程,习惯将它称为主线程。任何一个应用程序进程都有一个主线程。一般C程序中的Main或WinMain函数就规定了主线程的执行代码。当你启动了一个应用程序时,
5、操作系统在为它创建了进程之后,也创建了该进程的主线程,并根据Main或WinMain函数的地址,开始执行该进程的主线程。主线程可以创建并启动其他辅助线程,由主线程创建的线程又可以创建并启动更多的线程。一个线程也需要占用一定的系统资源,线程是进程中相对独立的执行单位,也是Win32操作系统中可调度的最小的执行单位。多个进程中的多个线程并发地执行。对于拥有多个处理机的计算机系统,调度程序可以将不同的线程安排到不同的处理机上去运行,一方面平衡了CPU的负载,另一方面也提高了系统的运行效率。当某个线程的代码都执行完毕时,该线程会自动终止;当一个线程
6、终止时,会将它所占用的资源释放给进程。7.2.3多线程机制在网络编程中的应用如果一个应用程序,有多个任务需要同时进行处理,那就最适合使用多线程机制。对于网络上客户机软件,采用多线程的编程技术,能克服在单线程的编程模式下,由于阻塞等待而产生的客户程序就不能及时响应用户的操作命令的问题。对于网络上服务器软件,采用多线程的编程技术,能更好地为多个客户服务。即便是对于一个客户,采用多线程机制也能大大提高应用程序的运行效率。比如大家熟悉的东方快车、网络蚂蚁等文件下载软件,就采用了多线程机制,用多个线程同时下载一个文件的不同部分,大大加快了下载速度。7
7、.3VisualC++6.0对多线程网络编程的支持VisualC++6.0为程序员提供了Windows应用程序的集成开发环境,在这个环境下,有两种开发程序的方法。既可以直接使用Win32API来编写C风格的Win32应用程序,也可以利用MFC基础类库编写C++风格的应用程序。在这两种Windows应用程序的开发方式下,多线程的编程原理是一致的。7.3.1MFC支持的两种线程微软的基础类库MFC提供了对于多线程应用程序的支持。在MFC中,线程分为两种,一种是用户接口线程(user-interfacethread),或称用户界面线程;另一种是工
8、作线程(theworkerthread),这两类线程可以满足不同任务的处理需求。1.用户接口线程用户接口线程通常用来处理用户输入产生的消息和事件,并独立地响应正在应用程序其它部分
此文档下载收益归作者所有