实验五、多线程并发服务器编程

实验五、多线程并发服务器编程

ID:46404861

大小:146.01 KB

页数:11页

时间:2019-11-23

实验五、多线程并发服务器编程_第1页
实验五、多线程并发服务器编程_第2页
实验五、多线程并发服务器编程_第3页
实验五、多线程并发服务器编程_第4页
实验五、多线程并发服务器编程_第5页
资源描述:

《实验五、多线程并发服务器编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验五、多线程并发服务器编程一、实验目的1、学习Linux操作系统的多线程的基本概念以及进程与线程的区别;2、掌握编写多线程程序的一般方法;3、熟悉多线程并发服务器的设计思路,以及多线程程序的编译链接方法。二、实验内容线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。现在多线程技术已经被许多操作系统所支持,包括Windows/NT以及Unix/Linux。  为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些

2、好处?什么的系统应该选用多线程?使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计一个进程的开销大约是一个线程开销的30倍左右。

3、  使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。1、编写一个最简单的多线程程序请仔细运行、

4、分析下列程序,指出多进程和多线程如何区分?何谓父线程和子线程?当父线程终止会导致子线程发生何种情况?/*****************************************************************文件名:pthread_example.c演示了pthread_create函数创建子线程的使用*******************************************************************/#include#i

5、nclude//创建多线程voidchildThread();intmain(){inti=0;pthread_tid;pthread_create(&id,NULL,childThread,NULL);printf("点击回车键结束运行");getchar();}voidchildThread(){inti;for(i=0;;){printf("childthreadsleep%d",i+1);sleep(1);}}编译链接多线程程序需要用到特殊的库文件libthr

6、ead.so,而我们在以前的实验中的编译链接程序的方式使用的是标准库函数,不需要特别指定。因此编译链接多线程的程序时必须使用–l选项,该选项后面直接跟库文件名称,但要去掉lib和后缀名,即–lthread。注意-l是lib的首字母。例如如果需要用到数学函数库libm.so则编译链接程序时需要使用选项–lm。按以前实验方式编译该程序发现错误,图1中红色部分为错误信息,该信息表明链接程序未找到函数pthread_create的实现。图2为编译正确的结果显示。图1、未使用-lpthread选项链接错误图

7、2、正确使用-lpthread选项编译链接结果2、多线程并发服务器编程类似于多进程服务器编程,本实验的多线程并发服务器也分为两部分程序:服务器程序和客户端程序。其中客户端部分和实验一中的客户端部分是一致的,在本实验中我们作了简化;请注意本实验中的客户端只是为了测试并发服务器的功能,它们本身并不属于多线程并发服务器的内容。服务器部分实现了多线程的功能,父线程不断地(for循环)等待客户端的连接,一旦有客户端连接服务器,服务器则创建(pthread_create)一个子线程用于该客户端的接收数据处理。

8、在验证结果阶段可以同时启动多个客户端,注意服务器只需要启动一次。显而易见的是随着客户端数量的增加,服务器子线程的数量也将线性增加,这必将加重服务器硬件资源(内存)的消耗,最终可导致服务器硬件资源耗尽而崩溃。但与实验六中多进程并发服务器相比,对同等数量的多线程和多进程程序而言,多线程程序对内存的需求明显低于多进程程序。本次实验中的客户端程序作了更多的简化,采用单文件方式。客户端部分未用到多线程,其编译链接方法与以前的实验一致。服务器部分仍然采用多文件方式,因此在编译运行时要用到多个C

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

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

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