总结: 1. socket默认是否是阻塞的?阻塞体现在哪里? 2. 如何让socket编程非阻塞? client.setblocking(False) #非阻塞 3. IO多路复用作用? 检测多个socket是否发生变化。 操作系统检测socket是否发生变化,有三种模式: select:最多102 ...
分类:
编程语言 时间:
2020-01-22 16:27:17
阅读次数:
73
redis 简介 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 ...
分类:
其他好文 时间:
2020-01-18 16:50:52
阅读次数:
106
redis如此之快,整体来说原因如下 绝大部分请求是纯粹的内存操作(非常快速) 采用单线程,避免了不必要的上下文切换和竞争条件 非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io ...
分类:
其他好文 时间:
2020-01-16 22:05:04
阅读次数:
175
1、NIO和OIO 非阻塞NIO的提出弥补了OIO同步阻塞的不足。 OIO是面向流的,需要顺序的读取字节,不能随意改变读取指针的位置。 NIO是面向缓冲区的,引入Channel和Buffer,可以随意地读取Buffer中任意位置的数据。 NIO通过通道和通道的多路复用技术实现非阻塞(IO多路复用模型 ...
分类:
编程语言 时间:
2020-01-16 10:41:58
阅读次数:
67
NIO的全称是non-blocking IO,也就是非阻塞IO,也有的人叫他New IO。他的核心内容主要有三部分,Channel(通道),Buffer(缓冲区), Selecto(选择器)。下面我们针对这三部分详细了解一下NIO。 Buffer(缓冲区) Buffer缓冲是一个指定固定数据量的容器 ...
分类:
编程语言 时间:
2020-01-10 12:15:31
阅读次数:
98
IO模型区分一个输入操作通常包括两个阶段:等待数据准备好从内核向进程复制数据对于一个套接字上的输入操作,第一步通常涉及等待网络数据从网络到达。当所等待数据到达后,它被复制到内核中的某个缓冲区。第二部就是把数据从内核缓冲区复制到应用进程缓冲区。同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求过程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步I
分类:
编程语言 时间:
2019-12-30 00:01:34
阅读次数:
149
一个输入操作通常包括2个阶段: 1,等待数据报准备好 2,把数据从内核空间复制到用户空间(进程空间) 比如一个套接字的输入操作: 1,等待数据从网络中到达到内核缓冲区中 2,把数据从内核缓冲区复制到进程缓冲区 阻塞式IO 非阻塞IO 多路复用IO 信号驱动IO 异步IO 五种IO模型的比较 ...
分类:
系统相关 时间:
2019-12-29 18:14:25
阅读次数:
106
1、首先我们谈一下为什么Redis快: 一、 Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快。 二、 再说一下IO,Redis使用的是非阻塞IO,IO多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线 ...
分类:
其他好文 时间:
2019-12-28 16:37:10
阅读次数:
121
一。四种io阻塞1.io阻塞:(1 等待数据处于阻塞状态(2从内核copy到用户态处于阻塞状态2.非io阻塞只有从内核copy到用户态处于阻塞状态3.io多路复用 》优势:可以同时监听多个对象(1从check 》ready 通过selec函数来做,处于阻塞状态(2从内核copy到用户态处于阻塞状态3 ...
分类:
其他好文 时间:
2019-12-28 13:17:45
阅读次数:
161
【1】Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快; 2.redis是单线程的,省去了很多上下文切换线程的时间; 3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写 ...
分类:
编程语言 时间:
2019-12-20 20:30:58
阅读次数:
102