0%

要学Netty,得先从IO模型入手,一点点来。从Unix系统的5个IO模型,JDK的3种IO模型,Reactor模式的3种实现,最后到Netty事件模型的3种实现。

补完课,终于到Netty的IO模型这一章,(╥﹏╥),这一章主要从大颗粒度的了解下Netty的IO模型,Netty包含的组件,以及用Netty手写一个简单的RPC协议;

阅读全文 »

要学Netty,得先从IO模型入手,一点点来。从Unix系统的5个IO模型,JDK的3种IO模型,Reactor模式的3种实现,最后到Netty事件模型的3种实现。

本文主要搞清楚什么是Reactor模式?为什么要有Reactor模式?以及Reactor模式具体的3种实现方式是什么样的?

阅读全文 »

一个使用传统阻塞I/O的系统,如果使用一个请求对应一个线程这种模式,一旦有高并发的大量请求,就会有如下问题:

  1. 线程不够用, 就算使用了线程池复用线程也无济于事;
  2. 阻塞I/O模式下,会有大量的线程被阻塞,一直在等待数据,这个时候的线程被挂起,只能干等,CPU利用率很低,换句话说,系统的吞吐量低;
  3. 如果网络I/O堵塞或者有网络抖动或者网络故障等,线程的阻塞时间可能很长,整个系统也变的不可靠;

怎么办?NIO闪亮登场!

阅读全文 »

学Netty之前,得先了解Unix的5种IO模型,Java的3种IO模型;本文主要介绍Java中的3种IO模型(BIO,NIO,AIO);

  • BIO的优化版(线程池实现异步)适用于1000以内的并发场景;
  • NIO多路复用适用于高并发网络场景(Netty基于NIO实现);
  • AIO暂时用的较少;
阅读全文 »

学Netty之前,得先了解Uinux中的5种I/O模型,Java的3种I/O模型;

本文主要介绍《UNIX网络编程.卷1#6.2节》一书中提到的Unix中的5种IO模型:

  1. 阻塞式I/O(blocking I/O)
  2. 非阻塞式I/O(non-blocking I/O)
  3. I/O复用(I/O multiplexing)
  4. 信号驱动式I/O(signal driven I/O)
  5. 异步I/O(asynchronous I/O)

通常一个 socket 上的输入操作包含2个阶段:

  1. 等待数据准备好:通常涉及等待数据从网络中到达,当所等待分组到达时,它被复制到内核中的某个缓冲区;
  2. 从内核向进程复制数据:数据从内核缓冲区复制到应用进程缓冲区。

上述5种IO模型就是在这2个阶段上各有不同的情况。

通过本文,搞清楚什么是同步I/O,异步I/O,阻塞I/O,非阻塞I/O,他们之间有什么区别和联系?

阅读全文 »

GOF的设计模式,大话设计模式,Head First设计模式3本书之前都看过,但一聊起来总觉得描述不成体系,归根到底就是没彻底搞明白,书本上的看了只是当时明白,不实践,或是实践了但没回头和书本上的理论对照总结,那终归不是自己的知识;

模式就是方法论/工具 ,一定要牢记在心,工具箱里有各种趁手的武器,设计时才能有比较和选择,站在巨人的肩膀上,可以看的更远;

这次我再重新学一遍,不仅是要知道每个设计模式的分类/定义,更要结合JDK和开源框架中的应用来深入理解。本篇是第一篇,列举所有模式和应用场景,后续会对每个模式写一篇,包含的模式的概念,解决问题,适用场景,实现类图和示例代码;

阅读全文 »

一个数据处理过程一般可划分为3个大的阶段:获取数据源,执行数据预处理,执行指标计算,输出处理结果;

那Spark的一个离线计算的作业执行流程是什么样的呢?

阅读全文 »

在搞清楚JVM运行时数据区里面的堆/栈/GC这些原理之前,得先搞清楚JVM是如何把class文件加载到内存中的,这是一切开始的原点。

本文就主要说明JVM如何把Bytecode加载到Method Area的全过程。

阅读全文 »

之前写笔记也有意识的遵循一些规范/套路,比如WWW(What-是什么问题,When-什么情况发生,Why-为什么会这样),但都是些零碎,不成系统的经验之谈;

偶然了解到《金字塔原理》,和当初第一次阅读《高效能认识的七个习惯》一样的感觉,相见恨晚!
金字塔思维里阐述的表达技巧有别于文学创作,更注重的是信息传播的效率,以最少的语言,最简洁的形式让读者get到作者想表达的内容,写技术笔记真是再适合不过了;

本文主要记录如何运用金字塔思维来写技术笔记,持续更新写笔记的方法论。

注意一篇文章关注解决1个问题

阅读全文 »

现如今程序大多运行在核多线程的硬件环境下,为了保证资源的读写安全,于是出现了各种各样的锁,那么锁是什么?为什么要有锁?有哪些锁?不同锁的实现原理、优缺点、适用场景是什么?有哪些使用案例?

本文主要介绍Java中的锁,涉及到下面几种分类:

  • 乐观锁/悲观锁;
  • 共享锁/互斥锁;
  • 读锁/写锁;
  • 轻量级锁/重量级锁;
  • 偏向锁/可重入锁;
  • 非公平锁/公平锁;
阅读全文 »

持久化是Redis HA的一种,主要实现数据备份,与主从复制相比强调的是由内存到硬盘的备份。

本文总结Redis的持久化策略(RDB和AOF),各自的文件格式控制参数触发机制实现方式实现原理执行流程优缺点

阅读全文 »

介绍Hbase出场背景、解决问题、应用场景

Hbase是山寨Google的Bigtable的开源、分布式、列数据库,可以解决海量数据的存储问题,适用于需要随机、实时读/写的场景;

阅读全文 »

在某些场景,没有资源独立部署消息队列集群,但是有异步任务又需要快速处理完成,这时候就需要并行计算来解决了,

参考MQ的生产者消费者工作模式,将任务生产者消费者通过队列的实现解耦;

1个生产者生成一批任务后,阻塞等待多个消费者并行执行完成,然后释放消费者线程和生产者线程;

阅读全文 »

记录一次线上MySQL数据库的死锁问题和相关知识:

  • MySQL数据库事务的4要素,
  • 事务隔离的4种级别,
  • 事务隔离导致的3类问题,
  • 死锁的4个必要条件,
  • 死锁的解决方案…
阅读全文 »