现在就来实现客户端的不断发送,服务端的接收
# 使用 input 循环向服务端发送请求
>>>while True:
# .encode() 将字符串转为 byte 类型
>>> send_data = input("--->").encode()
# 接收服务端的返回,需要声明收多少,默认1024字节
>>>recv_data = client.recv(1024)
# 关闭接口
>>>client.close()
一起来看下效果怎样哈~
觉得还可以吧
不完美的CPU利用率
> 任何Python操作都是需要花费CPU资源的 !
> 如果资源还没有到达,那么accept、recv以及send(在connect没有完成时)操作都是无效的CPU花费 !
> 对应BlockingIOError的异常处理也是无效的CPU花费 !
如何提高CPU的有效利用率呢?
IO多路复用
IO多路复用也是阻塞IO, 只是阻塞的方法是select/poll/epoll, 好处就是单个进程可以处理多个socket
用select,poll,epoll监听多个io对象,当io对象有变化(有数据)的时候,则立即通知相应程序进行读或者写操作。
但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写时间就绪后自己负责进行读写,也就是说这个读写过程是阻塞的
因为阻塞I/O只能阻塞一个I/O操作,而I/O复用模型能够阻塞多个I/O操作, 所以才叫做多路复用
IO 多路复用模型
为什么是 epoll ?
目前 Linux 上效率最高的 IO多路复用 技术 !
epoll 基于惰性的事件回调机制
惰性的事件回调是由用户自己调用的,操作系统只起到通知的作用