并发篇-python非阻塞套接字-2

现在就来实现客户端的不断发送,服务端的接收

# 使用 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 基于惰性的事件回调机制

惰性的事件回调是由用户自己调用的,操作系统只起到通知的作用

原文发布于微信公众号 - 数据云团(SmartData)

原文发表时间:2018-12-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券