• 五、IO模型简介


    1、IO模型简介

    """
    针对网络IO
    """
    """
    	* blocking IO	阻塞IO
    	* nonblocking IO 非阻塞IO
    	* IO multiplexing 	IO多路复用
    	* signal driven IO	信号驱动IO
    	* asynchronous IO	 异步IO 
    """

    2、图解

     

    3、IO多路复用

    3.1 使用方式

    # 服务端
    import socket
    import select
    """
    当监管的对象只有一个的时候,IO多路复用连阻塞IO都比不上
    但是IO多路复用可以一次性监管很多个对象
    
    监管机制是操作系统本身就有的,如select
    """
    
    
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(("127.0.0.1", 8888))
    server_socket.listen(5)
    server_socket.setblocking(False)    # 设置为非阻塞
    
    read_list = [server_socket]  # 添加server_socket到监管的队列中
    
    while True:
        r_list, w_list, x_list = select.select(read_list, [], [])
        for i in r_list:
            # 针对不同的对象,做不同的处理
            if i is server_socket:
                client_socket, addr = i.accept()
                # 添加到监管的队列中
                read_list.append(client_socket)
            else:
                res = i.recv(1024)
                if len(res) == 0:
                    i.close()
                    # 将无效的监管对象 移除
                    read_list.remove(i)
                    continue
                print(res)
                i.send(b'test-test-test')
    
    
    # 客户端
    import socket
    
    client = socket.socket()
    client.connect(("127.0.0.1", 8888))
    
    while True:
        client.send(b'hello world')
        data = client.recv(1024)
        print(data)

    3.2 总结

    总结
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    监管机制包括:
    	select机制	windows linux都有
    	poll机制	只有linux有, poll和select都可以监管多个对象,但是poll监管的数量更多
    	
    	epoll机制		只在linux有,它给每个监管对象都绑定了一个回调机制, 一旦有响应,回调机制立刻发起提醒
    
    
    针对不同的操作系统需要考虑不同的检测机制,避免书写太多代码
    	selectors机制

    4、异步IO

    """
    异步IO模型是所有模型中效率最高的,也是使用最广泛的
    	相关的模块和框架
    	模块:asyncio模块
    	异步框架:sanic tronado twisted
    """
  • 相关阅读:
    2w字 + 40张图带你参透并发编程!
    完了,这个硬件成精了,它竟然绕过了 CPU...
    一文详解 Java 并发模型
    详解匈牙利算法与二分图匹配
    机器学习 | 详解GBDT在分类场景中的应用原理与公式推导
    Python | 浅谈并发锁与死锁问题
    LeetCode 91,点赞和反对五五开,这题是好是坏由你来评判
    LeetCode 90 | 经典递归问题,求出所有不重复的子集II
    【Azure DevOps系列】什么是Azure DevOps
    MSIL入门(四)之委托delegate
  • 原文地址:https://www.cnblogs.com/nuochengze/p/13372747.html
Copyright © 2020-2023  润新知