28 Python初学(事件驱动模型)
参考文章地址:http://www.cnblogs.com/yuanchenqi/articles/5722574.html
两个步骤:
recvfrom 系统调用 ; 拷贝数据 从kernel到数据
- 阻塞IO:在IO执行两个阶段进程都被阻塞(1. kernel 准备数据,等待数据到来 2. kernel 将数据拷贝到用户态)
- 非阻塞IO:第一步不阻塞,第二部拷贝数据阻塞(弊端:1. 多次询问 2. 数据不能及时同步)
- IO 多路复用(IO multiplexing):
又叫 ‘事件驱动IO’
select、epoll 的好处是单个 process 可以同时处理多个网络连接的IO。它的基本原理是select、epoll这个function会不断地轮询所有的socket,当某个socket有数据到达了,就通知用户进程。
select 是一个函数,进行数据监听。当调用这个函数时,他会发一个系统调用,监听数据是否到达。(进程会被阻塞,这个过程是 select 这个函数阻塞的)
当 select 告诉进程数据到达之后,进程需要多做一件事情,仍然要使用 recvfrom 进行 system call:告诉内核将数据拷贝到进程(此过程进程也会被阻塞)
好处:select 可以监听多个描述符,完成并发的效果。 跨平台
4. 异步IO:
完全没有阻塞,用户进程发起read 操作之后,kernel如果还没有将数据准备好,会立即返回。这个时候进程可以去做其他的事情,当数据准备好并且kernel将数据拷贝到内存时,kernal会给进程发一个singal信号,告诉他read操作已经完成。
select、poll、epoll IO多路复用:
epoll 真正解决了 select 的轮询问题,但它是同步IO
server:
# _author: lily
# _date: 2019/2/1 import socket
import time sk = socket.socket()
adress = ('127.0.0.1', 8080)
sk.bind(adress)
sk.listen(3)
sk.setblocking(False) while 1:
try:
conn, addr = sk.accept()
while 1:
data = conn.recv(1024)
print(data.decode('utf8'))
conn.sendall(data)
conn.close() except Exception as e:
print(' no data: ', e)
time.sleep(3)
client:
# _author: lily
# _date: 2019/2/1
import socket sk = socket.socket()
adress = ('127.0.0.1', 8080)
sk.connect(adress) while 1:
# inp = input('>>')
sk.sendall('hello'.encode('utf8'))
data = sk.recv(1024)
print(data.decode('utf8'))
sk.close()
28 Python初学(事件驱动模型)的更多相关文章
- 35.python之事件驱动模型
转载:https://www.cnblogs.com/yuanchenqi/articles/5722574.html 事件驱动模型 上节的问题: 协程:遇到IO操作就切换. 但什么时候切回去呢?怎么 ...
- Python自动化之select、greenlet和gevent和事件驱动模型初探
进程.线程和协程的区别 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 协程和线程一样 ...
- Python并发编程-事件驱动模型
一.事件驱动模型介绍 ...
- python网络编程--事件驱动模型
论事件驱动与异步IO 事件驱动模型:根据事件的触发去干什么事,就是根据一个事件做反应 原文:http://www.cnblogs.com/alex3714/articles/5248247.html常 ...
- python学习之-- 事件驱动模型
目前主流的网络驱动模型:事件驱动模型 事件驱动模型:也属于生产者/消费者结构,通过一个队列,保存生产者触发的事件,队列另一头是一个循环从队列里不断的提取事件.大致流程如下:1:首先生成一个事件消息队列 ...
- Day14 - Python基础14 事件驱动模型、IO模型
本节内容: 1:事件驱动模型 2:IO模型前戏准备 3:4种IO模型 1:事件驱动模型 传统的编程是如下线性模式的: 开始--->代码块A--->代码块B--->代码块C---> ...
- python 浅析IO 模型
协程:遇到IO操作就切换,但是什么时候切回去呢?怎么确定IO操作? 很多程序员可能会考虑使用"线程池"或"连接池"."线程池"旨在减少创建和 ...
- python学习----IO模型
一.IO模型介绍 本文讨论的背景是Linux环境下的network IO. 本文最重要的参考文献是Richard Stevens的"UNIX® Network Programming Vol ...
- (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本章我们讨论一个除前面的单例 ...
随机推荐
- 处理安卓和ios当页面原生键盘弹出,输入框不显示
$('input').on('click', function () { var target = this; // 使用定时器是为了让输入框上滑时更加自然 setTimeout(function() ...
- Java实现发送手机验证码功能(短信+语音)
利用第三方平台可以实现发送手机短信验证码和语音验证码的功能,本文使用框架是struts2+spring+hibernate,现就action层给出核心代码功能. public class Verify ...
- #Java学习之路——基础阶段二(第四篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- AI - TensorFlow - 示例02:影评文本分类
影评文本分类 文本分类(Text classification):https://www.tensorflow.org/tutorials/keras/basic_text_classificatio ...
- 【机器学习】--xgboost从初识到应用
一.前述 在 Kaggle 的很多比赛中,我们可以看到很多 winner 喜欢用 xgboost,而且获得非常好的表现,今天就来看看 xgboost 到底是什么以及如何应用.Gradient boos ...
- 性能测试工具 wrk 使用教程
文章首发自个人微信公众号:小哈学Java 个人网站地址:https://www.exception.site/wrk 被面试官经常问到之前开发的系统接口 QPS 能达到多少,经常给不出一个数值,支支吾 ...
- nginx 报错502Bad Gateway
场景: 目前在ECS中起了多个node服务,使用forever进程守护,最近,打开线上页面发现报错502 Bad Gateway;同时部分静态资源访问不到.(之前可以的): 解决: 首先查看nginx ...
- 今天筹备了一件大事:重学JS
最近在阮大神的博客上看到一篇文章,讲的是关于如何自学计算机技术,原文出自 Teach Yourself Computer Science.看完以后我明白自己的缺陷在哪里,基础不够牢固是我最大的问题. ...
- 基于mapreduce实现图的三角形计数
源代码放在我的github上,想细致了解的可以访问:TriangleCount on github 一.实验要求 1.1 实验背景 图的三角形计数问题是一个基本的图计算问题,是很多复杂 ...
- 制造业物料清单BOM、智能文档阅读、科学文献影响因子、"Celebrated Italian mathematician ZepartzatT Gozinto" 与 高津托图
意大利数学家Z.高津托 意大利伟大数学家Sire Zepartzatt Gozinto的生卒年代是一个谜[1],但是他发明的 “高筋图” 在 制造资源管理.物料清单(BOM)管理.智能阅读.科学文献影 ...