python socket epoll_python 关于epoll的学习
在linux中,默认情况下所有的socket都是blocking;当 用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来。而在用户进程这边,整 个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除 block的状态,重新运行起来。
所以,blocking IO的特点就是在IO执行的两个阶段(等待数据和拷贝数据两个阶段)都被block了。
几乎所有的程序员第一次接触到的网络编程都是从listen()、send()、recv() 等接口开始的,这些接口都是阻塞型的。使用这些接口可以很方便的构建服务器/客户机的模型。
在python socket模型当中,当使用socket初次编程的时候都会遇到一个阻塞问题;当一个socet的server被一个client暂用之后;参数了阻塞,新的连接是不能进来的,当然还有一个封装的socketserver利用多线程很好的解决了这个问题;但是我们思考一个问题,就是当连接数很多时候很多的线程是否对我们系统照成影响呢,当然可以通过线程池来解决这个问题,但是瓶颈也会产生。
下面学习用epoll的方式来进行网络编程,当然对比与select只能打开1024(可以调整,但是文件描述符多了性能会下降)epoll的优势就非常明显了。
代码:
这样就实现了无阻塞的io SOcket模型:
可以参考老外写的文章:
python socket epoll_python 关于epoll的学习相关推荐
- python socket服务器_python网络编程学习笔记(三):socket网络服务器
1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较.步骤 TCP客户端 TCP服务器 第一步 建立socket对象 建立socket对象 ...
- python socket编程_Python学习记录-socket编程
1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- php socket 握手,python Socket之客户端和服务端握手详细介绍
这篇文章主要为大家详细介绍了python Socket之客户端和服务端握手,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单的学习下利用socket来建立客户端和服务端之间的连接并且发送数据 1 ...
- python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案
python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...
- python网络编程讲解_详解Python Socket网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- Python Socket网络编程(二)局域网内和局域网与广域网的持续通信
目录 前言 IP地址 简介 公有IP 私有IP 局域网之间网络通信 前提 功能描述 源码 运行结果 局域网与广域网网络通信 前提 源码 结语 前言 本系列博客是笔者学习Python Socket的过程 ...
- Python Socket网络编程(一)初识Socket和Socket初步使用
目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...
- python socket实现实时通信
基于python socket.pyqt5 实现的界面化实时通信(仿QQ) 前段时间学了socket编程,也跟着几位up主学了简易的聊天程序,觉得能实现有界面的聊天程序,便利用界面化设计编写了此程序. ...
最新文章
- Windows Server 2008 R2之十一Windows Server Backup
- IOS之AutoLayout框架的使用
- hdu3666-THE MATRIX PROBLEM【差分约束,自然对数】
- pycharm如何汉化
- TJU 2248. Channel Design 最小树形图
- mysql的sql经典写法收录
- Android开发学习之路-机器学习库(图像识别)、百度翻译
- IDEA下查看Java字节码(插件ByteCode Viewer)
- Rails I18n验证弃用警告
- Python 集合 day3
- 一个基于verilog的FPGA 的LCD 1602 显示程序
- 2018华为网络技术大赛课程-服务器操作系统基础原理自测题答案
- 泊松分布 二项分布 正态分布之间的联系,与绘制高斯分布图
- 离散数学:快速又准确地求解主合取范式和主析取范式 (配凑大法好)
- 微信nickname乱码 php,CSV中微信名字乱码 问题
- 为何提示网站安全证书有问题?不同原因下,如何解决?
- 经典算法题(中级)-----自定义函数之字符类型统计
- 基础架构即服务(iaas)_基础架构即服务
- Java对上传的图片进行格式校验以及安全性校验
- 反催收凉透 马上、平安普惠、招联、中银消费金融等联手打击
热门文章
- Android USB转串口编程
- 微信小程序实现数组排序(向上向下移动)
- python字符串数字求和_python处理字符串:将字符串中的数字相加求和
- 启动“powershell.exe”时出现错误 0x8007000
- SOL注入——基于联合查询的数字型GET注入(二)
- python分类算法的应用_07-机器学习_(lineage回归分类算法与应用) ---没用
- botley编程机器人测评_浅谈少儿编程教育启蒙----教具篇
- cvpr 深度估计_干货 | 2019 到目前为止的深度学习研究进展汇总
- nacos使用_使用Nacos的CMDB实现微服务的就近访问!
- 英语阅读计算机病毒是指,2016年职称计算机考试真题及答案