博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
I/O模型
阅读量:4308 次
发布时间:2019-06-06

本文共 1892 字,大约阅读时间需要 6 分钟。

# I/O模型 # block I/O 阻塞IO 类型于socket中的例子 # noblocking I/O 非阻塞IO 缺点:发了太多的系统调用,不能及时处理数据 server.py
import time, socketsk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sk.bind(('127.0.0.1', 8080))sk.listen(5)sk.setblocking(False)  # 设置阻塞为Falseprint('waiting client connecting...')while True:    try:        conn, addr = sk.accept()  # 进程主动轮询        print('+++', addr)        client_message = conn.recv(1024)        print(str(client_message, 'utf-8'))        conn.close()    except Exception as e:      # 当没有客户端连接时,执行下面代码        print(e)        time.sleep(4)

client.py

import socket, timesk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)while True:    sk.connect(('127.0.0.1', 8080))    print('hello')    sk.sendall(bytes('hello', 'utf-8'))    time.sleep(2)    break
# I/O multiplexing  IO多路复用:利用IO空闲的时间来处理并发(select poll epoll 效率从低到高) # 在windows下只有select (跨平台,最大连接数为1024), linux下select poll epoll都有 server.py
import socketimport selectsk = socket.socket()sk.bind(('127.0.0.1', 8080))sk.listen(5)inputs = [sk, ]while True:    r, w, e = select.select(inputs, [], [], 5)      # 参数为输入列表(监听了sk对象), 输出列表, 错误列表, 每隔几秒钟进行监听    print(len(r))    for obj in r:        if obj == sk:       # 判断接收的是sk还是conn,如果是sk,就建立连接            conn, add = obj.accept()            print(conn)            inputs.append(conn)     # 将conn加入到输入列表中        else:       # 如果是conn 就收发信息            data_byte = obj.recv(1024)            print(str(data_byte, 'utf-8'))            inp = input('回答%s号客户>>>' % inputs.index(obj))            obj.sendall(bytes(inp, 'utf-8'))    print('>>>>', r)

client.py

import socketsk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sk.connect(('127.0.0.1', 8080))while True:    inp = input('>>').strip()    sk.sendall(inp.encode('utf-8'))    data = sk.recv(1024)    print(data.decode('utf-8'))
# Asynchronous I/O 异步IO 所有IO模型中效率最好的一个,全程无阻塞

转载于:https://www.cnblogs.com/dangrui0725/p/9502372.html

你可能感兴趣的文章
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>
PCB布线技巧
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>
PCB反推理念
查看>>
京东技术架构(一)构建亿级前端读服务
查看>>