阻塞IO 传统的 IO 流都是阻塞式的。 也就是说,当一个线程调用 read() 或 write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。 因此,在完成网络通信进行 IO 操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务 ...
分类:
其他好文 时间:
2018-09-09 15:00:49
阅读次数:
167
一、用非阻塞IO解决阻塞IO模型 import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() sk.setblocking(False) lst = [] del_lst = [] while 1: try: ...
分类:
其他好文 时间:
2018-08-29 01:14:36
阅读次数:
163
基本IO模型 普通套接字实现的服务端一次只能服务一个客户端 普通套接字实现的服务端的瓶颈在于在没有新的套接字来之前, 不能处理已经建立连接的套接字的请求。具体解释如下: 服务器套接字开始监听后,就可接受客户端连接了,这是使用accept来完成的。这个方法将等待到客户端连接到来为止,然后返回一个格式为 ...
分类:
其他好文 时间:
2018-08-28 11:29:15
阅读次数:
169
概念术语 同步与异步: 同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。 异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。 阻塞与非阻塞: IO模型介 ...
分类:
其他好文 时间:
2018-08-21 23:28:36
阅读次数:
323
响应结果: 响应行\r\n 响应头\r\n ...........\r\n ...........\r\n ........... \r\n\r\n 响应体 ...
分类:
Web程序 时间:
2018-08-16 17:37:10
阅读次数:
217
IO同步阻塞与同步非阻塞(IO为同步阻塞形式,NIO为同步非阻塞形式,NIO并没有实现异步,在JDK1.7后升级NIO库包,支持异步非阻塞(AIO),阻塞IO和非阻塞IO都是在网络编程的时候产生的,本地是没有这两个概念的) IO(BIO)和NIO区别: 其本质就是阻塞和非阻塞的区别。 BIO:同步阻 ...
分类:
其他好文 时间:
2018-08-15 14:57:37
阅读次数:
178
一、概述 非阻塞式IO的主要组成部分为Channel、Buffer和Selector。 通道可以向缓冲区写入数据,也可以从缓冲区读取数据。选择器允许单线程处理多个通道。 二、通道 通道类似流。不同之处在于通道是双向的、可异步读写、必须经过缓冲区。 主要的通道实现有 FileChannel:从文件读写 ...
分类:
编程语言 时间:
2018-08-12 21:29:14
阅读次数:
170
读某些文件时,如果文件没有数据的话,往往会导致读操作会阻塞(休眠)。比如 ①读鼠标、键盘等字符设备文件 读键盘阻塞 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 5 int main(void) 6 { 7 char ...
分类:
其他好文 时间:
2018-08-09 21:09:46
阅读次数:
158
阻塞IO(操作系统支持的功能):应用程序的线程 调用操作系统的IO操作,操作系统默认会主动把应用程序的线程设为sleep状态,直到操作系统完成IO,准备好数据后才将应用程序的线程唤醒 阻塞状态下,这个线程会被操作系统强制挂起(设为sleep),无法执行后边的操作。 非阻塞IO(操作系统支持的功能): ...
分类:
其他好文 时间:
2018-08-05 14:25:45
阅读次数:
133
1.io模型提交任务得方式: 同步:提交完任务,等结果,执行下一个任务 异步:提交完,接着执行,异步 + 回调 异步不等结果,提交完任务,任务执行完后,会自动触发回调函数同步不等于阻塞: 阻塞:遇到io,自己不处理,os会抢走cpu ,解决办法:监测到io,gevent切换到其他任务,类似欺骗os ... ...
分类:
其他好文 时间:
2018-08-01 18:14:11
阅读次数:
150