并发篇-python非阻塞套接字-1

2019-07-18 10:56:45 浏览数 (2)

非阻塞套接字到底带来了什么?

非阻塞套接字在accept或recv的时候不会发生阻塞,要么成功,

要么失败抛出BlockingIOError异常

使用非阻塞套接字实现并发

>并发是什么?

在一个时间段,完成某件事

整体思路

> 吃满 CPU!

> 宁可用 While True,也不要阻塞发呆!

> 只要资源没到,就先做其别的事!

> 将代码顺序重排,避开阻塞!

非阻塞套接字如何实现并发服务端?

配合try语句,将代码顺序重排,避开阻塞

# 第一层循环只负责生成对等连接套接字

>>>While True :

# 保留已经生成的对等连接套接字

>>>connection_list.append(conn)

# 把已经生成的对等连接套接字都处理一遍

>>>for connection in connection_list:

# 成功处理完一个对等连接套接字,就移出一个

>>>connection_list.remove(connection)

>普通套接字实现的服务端有什么缺陷吗?

有,一次只能服务一个客户端!

>这种缺陷是如何造成的?

accept阻塞:当没有套接字连接请求过来的时候会一直等待着

recv阻塞:当连接的这个客户端没有发数据过来的时候,也会一直等待着

非阻塞套接字——并发服务多个客户端

0 人点赞