无穷的开始:世界进步的本源(第2版)

无穷的开始:世界进步的本源(第2版)

加载中...

微信扫码,免登录解锁高速下载

如何使用 & 隐私说明

精彩点评

  • 无穷的开始:世界进步的本源(第2版)
    林子豪 Johny Sinn
    推荐

    在实际生产环境中,不同的技术框架是一起使用的,在集群中各司其责,这本书分析了现在流行框架Netty、Redis、Zookeeper的技术原理,以及如何将他们运用到实战之中,重要的部分都有涉及,简单易懂,可以快速地掌握他们的精髓,最后一章的IM系统是这些技术的综合应用,帮助你理解他们在集群中扮演的角色,如何构建一个负载均衡的高性能分布式系统。 Netty:异步的,事件驱动的网络通信框架,基于反应器模式,高性能高并发。 Redis:分布式缓存数据库。 Zookeeper:分布式集群协调服务,通过在内存中构建目录树来存储集群中的资源(节点)信息,可以提供动态节点的命名服务,可以实现分布式锁,可以统计整个集群的在线用户数等等。 第二章的高并发IO底层原理、第四章的Reactor反应器模式,是互联网架构技术的重点内容。 IO读写的基础原理: 调用操作系统的read,是把数据从内核缓冲区复制到进程缓冲区;而write系统调用,是把数据从进程缓冲区复制到内核缓冲区。 书中对同步与异步、阻塞与阻塞的解释是不清楚的,更准确的解释是: 1、同步与异步 同步和异步关注的是消息通信机制。 所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。也就是说,调用者主动等待这个调用的结果。 异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。 2、阻塞与非阻塞 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 NIO三大组件: 1、Bytebuff 缓冲区 2、Channel 通道 3、Selector 选择器 NIO与BIO的区别在于读写是否阻塞的,NiO需要轮询IO事件的就绪状态。 while(true){ ByteBuffer buffer=ByteBuffer.allocate(1024); int r=0; if((r=channel.read(buffer))!=0){ //处理数据 } } 通过选择器Selector,一个线程可以查询多个通道的IO事件的就绪状态,比如服务器监听通道有新连接、传输通道连接成功、传输通道可读、传输通道可写等等。 实现IO多路复用,首先把通道注册到选择器中,然后通过选择器内部的机制,可以查询(select)这些注册的通道是否有已经就绪的IO事件。 Selector的最大优势是,可以用一个线程去监控多个通道,与传统BIO相比,减少了多线程上下文切换的开销。 Nginx、Redis、Netty等中间件技术都是使用反应器技术。 传统BIO模式: 对于每一个新的网络连接都分配给一个线程。每个线程都独自处理自己负责的输入和输出,即Connection Per Thread模式。 缺点是,对应于大量的连接,需要耗费大量的线程资源,对线程资源要求太高。 如何解决Connection Per Thread模式的巨大缺陷呢?使用Reactor反应器模式。用反应器模式对线程的数量进行控制,做到一个线程处理大量的连接。 在反应器模式中,有Reactor反应器和Handler处理器两个重要的组件: (1)Reactor反应器:负责查询IO事件,当检测到一个IO事件,将其发送给相应的Handler处理器去处理。这里的IO事件,对应NIO中选择器监控的通道IO事件。 (2)Handler处理器:与IO事件绑定,负责IO事件的处理。完成真正的连接建立、通道的读取、处理业务逻辑、负责将结果写出到通道等。

Copyright © 2020 - 2022 Mitsuha. All Rights Reserved. 用户协议 · 隐私政策 ·