IO模型Redis是单线程的,为什么支持高并发?node.js,nginx也是单线程的。除了Redis数据是存在内存里面的,所有操作都是内存级别的,还有其它原因导致它有如此高的性能?多路复用(事件轮训)多路复用是一种IO模型,那系统中还有哪些IO模式?一起来看看吧常见的IO模型同步阻塞IO(BlockingIO)传统IO模型,请求server,如果server没有返回,client会一直等待,直到
分类:
其他好文 时间:
2019-05-28 18:42:03
阅读次数:
139
以socket.read()为例子: 同步阻塞模型:传统的BIO里面socket.read(),如果TCP RecvBuffer里没有数据,函数会一直阻塞,直到收到数据,返回读到的数据。 同步非阻塞模型:对于NIO,如果TCP RecvBuffer有数据,就把数据从网卡读到内存,并且返回给用户;反之 ...
分类:
其他好文 时间:
2019-04-29 12:31:07
阅读次数:
124
Linux五种IO模型 同步和异步 这两个概念与消息的通知机制有关。 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。比如,调用readfrom系统调用时,必须等待IO操作完成才返回。 异步 异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处 ...
分类:
系统相关 时间:
2019-04-20 19:50:09
阅读次数:
316
输入输出是操作系统不可或缺的一部分,大致分为两类:面向磁盘和面向网络。在 Java 中有3种 I/O 类型:BIO、NIO 和 AIO,分别是同步阻塞、同步非阻塞和异步非阻塞 I/O,这里着重描述 BIO 和 NIO 的区别和常用的编程模型。 1. 为什么设计 NIO 一个直接原因就是为了更好的利用 ...
分类:
其他好文 时间:
2019-04-18 09:30:48
阅读次数:
172
以前对同步、异步、阻塞和非阻塞的概念没有清晰的认识,错误地认为:同步=阻塞,异步=非阻塞。因此,在这里,对同步、异步、阻塞和非阻塞重新学习 参考链接: "聊聊同步、异步、阻塞与非阻塞" 什么是同步,什么是异步? 首先,我们要明确一点。同步和异步的概念和 消息的通知机制 有关。认识到这一点非常重要。 ...
分类:
其他好文 时间:
2019-04-14 16:02:44
阅读次数:
135
消费端消费消息的原理 我们通过上一节课的讲解,知道有两种方法可以接收消息,一种是使用同步阻塞的MessageConsumer#receive方法。另一种是使用消息监听器MessageListener。这里需要注意的是,在同一个session下,这两者不能同时工作,也就是说不能针对不同消息采用不同的接 ...
分类:
其他好文 时间:
2019-04-08 00:53:28
阅读次数:
128
有锁才能运行. 当一个线程调用锁的acquire()方法获得锁时,锁就进入“locked”状态。每次只有一个线程可以获得锁。如果此时另一个线程试图获得这个锁,该线程就会变为“blocked”状态,称为“同步阻塞”。直到拥有锁的线程调用锁的release()方法释放锁之后,锁进入“unlocked”状 ...
分类:
编程语言 时间:
2019-04-07 22:29:19
阅读次数:
235
IO 介绍 IO 模型 IO请求 分为两个阶段:等待资源 和 使用资源; IO请求:一般需要请求特殊资源(如 磁盘、RAM 或文件),当资源被上一个使用者使用没有释放的时候, IO请求会被阻塞,直到资源可用。 等待资源 阶段有两种策略: 阻塞:当IO请求资源没有准备好的时候,请求阻塞,直到得到资源的 ...
分类:
编程语言 时间:
2019-04-07 12:59:36
阅读次数:
170
一 高性能IO模型 1. 同步IO、异步IO、阻塞IO、非阻塞IO 通过IO模型介绍异步、同步、阻塞、非阻塞的IO看,本节参考文章: https://www.cnblogs.com/euphie/p/6376508.html 这里统一使用Linux下的系统调用recv作为例子,它用于从套接字上接收一 ...
分类:
其他好文 时间:
2019-03-30 18:38:55
阅读次数:
163
synchronized死锁 package com.thread.demo.deadlock; public class DeadLock { private static Object lock1 = new Object(); private static Object lock2 = new... ...
分类:
编程语言 时间:
2019-03-24 17:28:18
阅读次数:
209