前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并发篇-python非阻塞套接字-2

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

作者头像
小团子
发布2019-07-18 10:57:01
6060
发布2019-07-18 10:57:01
举报
文章被收录于专栏:数据云团

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档