web服务器使用多进程、多线程的原因
如果没有多进程和多线程,那么任务是单任务的,即在,为一个顾客服务的时候,不能同时为其他顾客服务
单线程非阻塞
from socket import *
serSocket = socket(AF_INET,SOCK_STREAM)
localAddr = ('',7788)
serSocket.bind(localAddr)
serSocket.listen(100)
serSocket.setblocking(False)#让这个socket成为非堵塞
clientList = []
while True:
try:
newSocket,clientAddr = serSocket.accept()
except Exception, e:
pass
else:
print("一个新的客户端到来:"%str(clientAddr))
newSocket.setblocking(False)
clientList.append((newSocket,clientAddr))
for clientSocket,clientAddr in clientList:
try:
recvData = clientSocket.recv(1024)
except Exception, e:
pass
else:
clientSocket.close()
print("clientAddr:%s recvData:%s"%(clientAddr,recvData))
print("%s 已经下线"%str(clientAddr))
select服务器
最多1024个套接字
poll版服务器
解决了套接字有上限的问题,轮询检测
epoll版服务器
没有套接字有上限的问题,事件通知机制
协程
又叫微线程
计算密集型——>需要占用大量的cpu资源——>用多进程
IO密集型——>需要网络功能,大量的事件都在等待数据的到来——>多线程
协程效率要高于进程和线程
应用层 解决要传递什么数据
传输层 解决如何传输数据udp tcp可以理解为快递公司
网络层 IP可以理解为地理位置坐标
链路层 具体的传输工具
ftp:传输文件
ssh安全协议
smtp协议
Pop3协议
网友评论