阻塞IO,非阻塞IO,IO多路复用模型

时间:2023-02-16 17:33:11

阻塞IO,非阻塞IO,IO多路复用模型

阻塞IO,非阻塞IO,IO多路复用模型

#服务端
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
while True:
    conn, address = sk.accept()
    while True:
        ret = conn.recv(1024)
        print(ret)
        inp = input('>>>')
        conn.sendall(inp.encode('utf-8'))
        # conn.sendall(bytes(inp, 'utf-8'))
#客户端
import socket
sk=socket.socket()
sk.connect(('127.0.0.1',8080))
while True:
    inp=input('>>>>')
    sk.sendall(bytes(inp,'utf-8'))
    data=sk.recv(1024)
    print(str(data,'utf-8'))

阻塞IO,非阻塞IO,IO多路复用模型

阻塞IO,非阻塞IO,IO多路复用模型

#非阻塞IO进行recvform系统调用,会马上得到一个结果,如果结果是一个error(异常处理)
# 此时证明数据还未准备好,在等在下次进行recvform系统调用的期间,进程可以做其他事情
#这个过程非阻塞将整片时间片分成N多小阻塞,循环往复的进行recvform的系统调用

#服务端
import time
import socket
import os
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# sk.setsockopt
sk.bind(('127.0.0.1',8080))
sk.listen(5)
sk.setblocking(False)
while True:
    try:
        print('waiting client connection.......')
        conn,address =sk.accept()
        # print(os.getpid())
        print('++++',address)
        ret = conn.recv(1024) #系统级内核数据拷贝到用户级内存
        print(ret)
        conn.close()
    except Exception as e:
        print(e)
        time.sleep(4)#在此期间进程可以做其他任务
#客户端
import time
import socket
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
while True:
    sk.connect(('127.0.0.1',8080))
    print('hello')
    sk.sendall(b'hello')
    time.sleep(2)
    break

阻塞IO,非阻塞IO,IO多路复用模型

阻塞IO,非阻塞IO,IO多路复用模型

#select的使用#服务端
import socket
import select
sk=socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen(5)
sk.setblocking(False)
inputs=[sk,] #监听一个活动对象的列表
while True:
    r,w,e=select.select(inputs,[],[],5) #哪个对象活动了,r就会被选出来
    print('可活动的列表长度%s' % len(inputs))
    print('活动的对象只有%s个' % len(r))
    # print(type(r))
    for obj in r:
        if obj==sk:
            conn,add=obj.accept()
            print('conn:',conn)
            inputs.append(conn) #客户端的套接字对象放入活动列表中
            print('append之后<<<',r)
        else:
            data_byte=obj.recv(1024)
            print(str(data_byte,'utf-8'))
            if not data_byte:
                inputs.remove(obj)
                continue
            inp=input('回答%s >>>' % inputs.index(obj))
            obj.sendall(bytes(inp,'utf-8'))
    print('结尾>>>',r)
#客户端
import socket
sk=socket.socket()
sk.connect(('127.0.0.1',8080))

while True:
    inp=input('>>>>')
    sk.sendall(bytes(inp,'utf-8'))
    data=sk.recv(1024)
    print(str(data,'utf-8'))

参考资料:http://www.cnblogs.com/Eva-J/articles/8324837.html

阻塞IO,非阻塞IO,IO多路复用模型的更多相关文章

  1. IO模型--阻塞IO&comma;非阻塞IO&comma;IO多路复用&comma;异步IO

    IO模型介绍: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 * signal driven IO 信号驱动IO ...

  2. python 全栈开发,Day44&lpar;IO模型介绍&comma;阻塞IO&comma;非阻塞IO&comma;多路复用IO&comma;异步IO&comma;IO模型比较分析&comma;selectors模块&comma;垃圾回收机制&rpar;

    昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...

  3. &lbrace;python之IO多路复用&rcub; IO模型介绍 阻塞IO&lpar;blocking IO&rpar; 非阻塞IO&lpar;non-blocking IO&rpar; 多路复用IO&lpar;IO multiplexing&rpar; 异步IO&lpar;Asynchronous I&sol;O&rpar; IO模型比较分析 selectors模块

    python之IO多路复用 阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 ...

  4. &lpar;IO模型介绍&comma;阻塞IO&comma;非阻塞IO&comma;多路复用IO&comma;异步IO&comma;IO模型比较分析&comma;selectors模块&comma;垃圾回收机制&rpar;

    参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...

  5. IO阻塞模型、IO非阻塞模型、多路复用IO模型

    IO操作主要包括两类: 本地IO 网络IO 本地IO:本地IO是指本地的文件读取等操作,本地IO的优化主要是在操作系统中进行,我们对于本地IO的优化作用十分有限 网络IO:网络IO指的是在进行网络操作 ...

  6. IO多路复用&comma;同步,异步,阻塞和非阻塞 区别

    一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是 ...

  7. IO多路复用&comma;同步,异步,阻塞和非阻塞 区别&lpar;转&rpar;

    转自:http://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral 同步.异步 是 ...

  8. Python网络编程-IO阻塞与非阻塞及多路复用

    前言 问题:普通套接字实现的服务端的缺陷 一次只能服务一个客户端!                         accept阻塞! 在没有新的套接字来之前,不能处理已经建立连接的套接字的请求 re ...

  9. Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】

    在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程——网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

  10. IO模型浅析-阻塞、非阻塞、IO复用、信号驱动、异步IO、同步IO

    最近看到OVS用户态的代码,在接收内核态信息的时候,使用了Epoll多路复用机制,对其十分不解,于是从网上找了一些资料,学习了一下<UNIX网络变成卷1:套接字联网API>这本书对应的章节 ...

随机推荐

  1. iOS开发之三个Button实现图片无限轮播&lpar;参考手机淘宝,Swift版&rpar;

    这两天使用Reveal工具查看"手机淘宝"App的UI层次时,发现其图片轮播使用了三个UIButton的复用来实现的图片循环无缝滚动.于是乎就有了今天这篇博客,看到“手机淘宝”这个 ...

  2. Linux&colon;Ubuntu16&period;04下创建Wifi热点

    Linux:Ubuntu16.04下创建Wifi热点 说明: 1.Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 2.本篇文章转载自编程人生 具体步骤如下: 1.  ...

  3. Java关键字&colon;transient&comma;strictfp和volatile简介

    关键字:transient 使用对象:字段 介绍:transient说明一个属性是临时的,不会被序列化. 当对象进行序列化(Serializable)过程时候,有一些属性的状态是瞬时的,这样的对象是无 ...

  4. 关于 Code First

    第一感觉还是很新鲜的,你可以*的控制数据结构. 比如,你想象oracle那样,给每个表增加4个字段,创建人,创建时间,更新人,更新时间.完全可以创建一个父类包含着四个属性(甚至可以把四个属性作为一个 ...

  5. python 安装scrapy

    1. 首先你先得安装PYTHON...还是推荐2.7吧,之前装了3.3似乎和这个世界格格不入...先装个2.7. 并将python加入系统的环境变量. 2. 去scrapy 官网下载最新版本的scra ...

  6. (六)6&period;7 Neurons Networks whitening

    PCA的过程结束后,还有一个与之相关的预处理步骤,白化(whitening) 对于输入数据之间有很强的相关性,所以用于训练数据是有很大冗余的,白化的作用就是降低输入数据的冗余,通过白化可以达到(1)降 ...

  7. Oracle日志文件管理与查看

    Oracle日志文件管理与查看 from:http://hi.baidu.com/shuker/item/25ee611ee960c7426826bb1f 1.查询系统使用的是哪一组日志文件: sel ...

  8. input text的outline属性

    普通的text选中编辑时会出现蓝色的边框,感觉不太美观,怎么去掉呢? 可以在text对应的样式里加入:outline: 0;

  9. SpringBoot(十七)-- 定时任务

    日常开发中,经常会使用定时任务来执行跑批,springboot默认已经帮助我们整合了定时任务. 参考:https://blog.csdn.net/u013845177/article/details/ ...

  10. Apache Kafka监控之KafkaOffsetMonitor

    转载自:http://www.cnblogs.com/Leo_wl/p/4564699.html 1.概述 前面给大家介绍了Kafka的背景以及一些应用场景,并附带上演示了Kafka的简单示例.然后, ...