type
status
date
slug
summary
tags
category
icon
password
 

分布式系统第一次作业

📝 题目:

安装jdk,安装maven,为maven设置阿里或腾讯镜像仓库,用
maven编译Helloworld版的java程序
(1)设计支持多客户端并发访问的向量计算服务器程序。
(支持向量点乘、向量又乘运算)
(2)利用JMeter测试你的服务器程序的并发性能(平均服务响
应时间和TPS指标)(本项选作)
 
因为之前并没有接触过Java😥,所以就根据老师提供的Socket包+CSDN(Polaris_T)程序+网页搜索Java线程、线程池等相关操作完成了本次实验。

编前须知

客户端程序:EchoClient

服务器端程序:ThreadPoolTest

 

测试结果

  1. 测试是否可以并发执行(最多允许8个客户同时访问
核心线程响应(3)
notion image
notion image
等待队列(3)
notion image
notion image
4,5,6号进入等待队列。
非核心线程响应(2)
notion image
notion image
 
2.测试任意客户退出,等待队列的客户是否可以和服务器通信
7号退出并结束访问,4号加入,由非核心线程执行。
notion image
notion image
notion image
7号退出且服务器正常记录到退出信息。同理,若当前核心线程退出,则等待队列里的由退出核心线程执行。
 
3.测试超过8个客户访问程序
notion image
notion image
notion image
新加入的10号客户超出最大允许访问数量,程序使用默认拒绝策略,报错并关闭线程池。之后的客户无法再与服务器连接。
 
4.测试当线程池中的所有客户退出后,服务器退出。
notion image

🤗 总结归纳

在本次分布式系统的作业设计中,一个重要的部分是独立编写客户端和服务器端程序。这两个程序的运行方式是:首先启动客户端和服务器端程序,然后客户端程序向服务器发送连接请求。服务器端程序接收到这些请求后,会建立与请求客户端的连接,这个连接是通过Socket管道实现的。一旦连接建立,客户端就可以与服务器进行通信,即向服务器发送信息。当客户端输入'quit'时,此次连接将被关闭。 为了扩展服务器端,使其可以接收多个客户端请求,使用线程池技术。这个线程池是由Java ThreadPoolExecutor创建的,每一个连接的客户端都会被分配到一个线程。这意味着,服务器可以同时处理多个客户端请求。我通过多次运行客户端程序,模拟了多客户并发访问的场景。
本次作业学习了Java的一些基本操作,练习了Socket编程以及线程池的相关操作。是对分布式系统知识的一次综合应用。锻炼了学习新东西的能力。( •̀ ω •́ )y

📎 参考文章

 
多媒体数据处理上机实验一南方周末2024新年献词丨守住不惑的底线,选择做最值得的自己
  • Twikoo
  • Giscus
  • Cusdis