2017-2018-1 20155205 实验三 实时系统
2017-2018-1 20155205 实验三 实时系统
实验步骤
- 任务一
学习使用Linux命令wc(1)
基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端
客户端传一个文本文件给服务器
服务器返加文本文件中的单词数
首先,要想作为一个合格的程序员,要先查看wc的帮助文档。
我们可以看到wc有四个参数,对两个文档测试一下,可以看到输出了字节数、字数和行数。
接下来编写一个自己的wc。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int countChar(char input[]){
int p_input = 0;
int count = 0;
int word = 0;
char ch;
while(p_input < strlen(input)){
ch = input[p_input];
if(ch==' '){
if(word){ //读取到空字符,而之前是非空字符,则说明读完了一个单词
count++;
word = 0;
}
}else{ //读取到第一个非空字符,说明是单词的开始
word = 1;
}
p_input++;
}
return count;
}
int main()
{
char input[256];
int p_input = 0;
int count = 0;
FILE *fp = fopen("text.txt","r");
fgets(input,256,fp);
fclose(fp);
count = countChar(input);
printf("Your words count:\n%d\n",count);
return 0;
}
再将mywc写到server中,统计字数后将结果返回给client。
- 任务二
使用多线程实现wc服务器并使用同步互斥机制保证计数正确
对比单线程版本的性能,并分析原因
实验结果:
分析:只有单线程的话,服务器与客户端之间不能形成一对多的服务体制。在操作系统课中,我们学到多线程能有效地避免代码阻塞,并且提高程序的运行性能。
实验总结
-
多线程的优点:
(1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;
(2)当前没有进行处理的任务时可以将处理器时间让给其它任务;
(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;
(4)可以随时停止任务;
(5)可以分别设置各个任务的优先级以优化性能。
-
多线程的缺点
(1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。
(2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。
(3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。
(4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。