网络IO-阻塞、非阻塞、IO复用、异步

网络IO模型包括阻塞、非阻塞、IO复用、信号驱动IO和异步IO五种类型。阻塞IO无法应对多个连接的情形,单个socket操作阻塞会导致服务端无法接受其他连接,虽然可以用多线程、多进程的方式,将不同的连接放在不同的线程中和客户端交互,并利用线程池和连接池进行优化。但创建进程和线程会占用系统资源,当面对大规模连接时,系统资源浪费严重,系统响应效率不高。 非阻塞模型当socket读写操作未就绪时会立即返回,而不会阻塞等待,可以利用轮询的方式来进行读写操作,但当内核收到数据报到应用进程感知并处理会有时延。 利用IO复用,将监控socket读写操作是否就绪和进行读写操作分开,且IO复用可监控socket集合,IO复用包含select、poll、epoll三种模型。 select模型存在如下三种缺点: 1) 每次都需要将fd_set拷贝到内核空间,当fd_set较大时开销很大 2) 每次都需要在内核中遍历fd加入到等待队列,fd较多开销较大 3) select支持的文件描述符太小,默认为1024。 poll模型可同时监控的socket没有上线限制,取决于系统资源,
posted @ 2019-07-08 00:11  golang架构师k哥  阅读(4836)  评论(2编辑  收藏  举报