在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的学习相关推荐

  1. python socket服务器_python网络编程学习笔记(三):socket网络服务器

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较.步骤 TCP客户端 TCP服务器 第一步 建立socket对象 建立socket对象 ...

  2. python socket编程_Python学习记录-socket编程

    1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...

  3. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  4. php socket 握手,python Socket之客户端和服务端握手详细介绍

    这篇文章主要为大家详细介绍了python Socket之客户端和服务端握手,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单的学习下利用socket来建立客户端和服务端之间的连接并且发送数据 1 ...

  5. python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案

    python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...

  6. python网络编程讲解_详解Python Socket网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  7. Python Socket网络编程(二)局域网内和局域网与广域网的持续通信

    目录 前言 IP地址 简介 公有IP 私有IP 局域网之间网络通信 前提 功能描述 源码 运行结果 局域网与广域网网络通信 前提 源码 结语 前言 本系列博客是笔者学习Python Socket的过程 ...

  8. Python Socket网络编程(一)初识Socket和Socket初步使用

    目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...

  9. python socket实现实时通信

    基于python socket.pyqt5 实现的界面化实时通信(仿QQ) 前段时间学了socket编程,也跟着几位up主学了简易的聊天程序,觉得能实现有界面的聊天程序,便利用界面化设计编写了此程序. ...

最新文章

  1. Windows Server 2008 R2之十一Windows Server Backup
  2. IOS之AutoLayout框架的使用
  3. hdu3666-THE MATRIX PROBLEM【差分约束,自然对数】
  4. pycharm如何汉化
  5. TJU 2248. Channel Design 最小树形图
  6. mysql的sql经典写法收录
  7. Android开发学习之路-机器学习库(图像识别)、百度翻译
  8. IDEA下查看Java字节码(插件ByteCode Viewer)
  9. Rails I18n验证弃用警告
  10. Python 集合 day3
  11. 一个基于verilog的FPGA 的LCD 1602 显示程序
  12. 2018华为网络技术大赛课程-服务器操作系统基础原理自测题答案
  13. 泊松分布 二项分布 正态分布之间的联系,与绘制高斯分布图
  14. 离散数学:快速又准确地求解主合取范式和主析取范式 (配凑大法好)
  15. 微信nickname乱码 php,CSV中微信名字乱码 问题
  16. 为何提示网站安全证书有问题?不同原因下,如何解决?
  17. 经典算法题(中级)-----自定义函数之字符类型统计
  18. 基础架构即服务(iaas)_基础架构即服务
  19. Java对上传的图片进行格式校验以及安全性校验
  20. 反催收凉透 马上、平安普惠、招联、中银消费金融等联手打击

热门文章

  1. Android USB转串口编程
  2. 微信小程序实现数组排序(向上向下移动)
  3. python字符串数字求和_python处理字符串:将字符串中的数字相加求和
  4. 启动“powershell.exe”时出现错误 0x8007000
  5. SOL注入——基于联合查询的数字型GET注入(二)
  6. python分类算法的应用_07-机器学习_(lineage回归分类算法与应用) ---没用
  7. botley编程机器人测评_浅谈少儿编程教育启蒙----教具篇
  8. cvpr 深度估计_干货 | 2019 到目前为止的深度学习研究进展汇总
  9. nacos使用_使用Nacos的CMDB实现微服务的就近访问!
  10. 英语阅读计算机病毒是指,2016年职称计算机考试真题及答案