一、题目
编写一个C/S架构的分布式程序,Server接受Client发来的请求,执行一个计算F(X)并给Client返回结果;分别用进程与线程作为服务器Server实现,并比较服务器的开销。可以在一台机器上模拟。
二、实验过程
用python实现Client和Server,实现Client发送一个数,Server返回这个数的4次方。server_process用进程实现,server_thread用线程实现。client.py中计算从发送第一个数据到接收完最后一个数据的时间差
源代码如下:
client.py
import socket
import time
time1 = time.time()
for i in range(1,100):
s = socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host,port))
s.send('20')
print(s.recv(1024).decode('utf-8'))
time2 = time.time()
print(time2 - time1)
server_thread.py
import socket
from threading import Thread
s = socket.socket()
host = socket.gethostname()
s.bind((host,1234))
s.listen(100)
print("Waiting for connection......")
def tcplink(sock,addr):
print("Accept new connection from %s:%s" % addr)
data = sock.recv(1024)
i = int(data)
sock.send(str(i*i*i*i))
sock.close()
print("connection closed!")
while True:
sock, addr = s.accept()
t = Thread(target = tcplink, args = (sock,addr))
t.start()
server_process.py
import socket
from multiprocessing import *
s = socket.socket()
host = socket.gethostname()
s.bind((host,1234))
s.listen(100)
print("Waiting for connection......")
def tcplink(sock,addr):
print("Accept new connection from %s:%s" % addr)
data = sock.recv(1024)
i = int(data)
sock.send(str(i*i*i*i))
sock.close()
print("connection closed!")
while True:
sock, addr = s.accept()
t = Process(target = tcplink, args = (sock,addr))
t.start()
三、实验结果
多进程实现如图所示:
多线程实现如图所示:
从结果图中可以看到,多进程所用时间为0,14178,而多线程所用时间为0.04780,多进程比多线程慢了将近2倍,因此可以得出结论,多进程在服务器中开销较大,使用多线程速度较快。
Comments | NOTHING