在“Synchronized(2) - 轻量级锁 ”中介绍了轻量级锁的流程,当存在多个线程竞争锁时,当前竞争线程尝试使用自旋来获取锁。如果自旋获取锁失败,那么轻量级锁就会膨胀为重量级锁,将对象头Mark Word中的锁标志状态值修改为“10”,并将其指向重量级锁的指针 more >>
随遇而安
在“Synchronized(2) - 轻量级锁 ”中介绍了轻量级锁的流程,当存在多个线程竞争锁时,当前竞争线程尝试使用自旋来获取锁。如果自旋获取锁失败,那么轻量级锁就会膨胀为重量级锁,将对象头Mark Word中的锁标志状态值修改为“10”,并将其指向重量级锁的指针 more >>
在“Synchronized(1) - 偏向锁”中介绍了偏向锁的流程,当偏向锁运行在第一个线程进入同步块的情况下,而第二个线程开始进入同步块的时候,偏向锁就会升级为轻量级锁;此外,如果一开始就关闭了偏向锁,那么JVM会直接采用轻量级锁来进行上锁。 more >>
当我们进行数据传输的时候,往往需要使用到缓存区,常用的缓冲区就是JDK NIO类库提供的java.nio.Buffer。在NIO编程中,我们最主要使用的是ByteBuffer,但是ByteBuffer也有其局限性,因此netty提供了自己的ByteBuffer的实现(ByteBuf)。下面将介绍ByteBuffer与ByteBuf的区别,以及在netty中是如何进行内存管理的。 more >>
在前文“netty - ChannelPipeline与ChannelHandler”提到,netty的write事件是一个outbound类型事件,该事件会最先由pipeline中的TailHandler透传给前面的一个outbound类型的用户handler,这样依次传递,直到传递给HeadHandler,HeadHandler会调用unsafe.write()方法,这里的write方法并不会执行真正的发送,而是将要发送的数据缓存起来,直到调用flush时,这些数据才会执行真正的网络I/O。 more >>
为了解决分布式一致性问题,涌现了一批经典的一致性协议和算法,其中最著名的就是二阶段协议、三阶段协议和Paxos算法。本文将介绍什么是二阶段协议和三阶段协议,以及各自的优缺点。 more >>
在多线程并发编程中,synchronized一直扮演重要的角色,在JAVA SE 1.6版本之前被称为重量级锁。在JAVA SE 1.6中synchronized得到了优化,为了减少锁和释放锁带来的性能消耗而引入了偏向锁和轻量级锁。本文重点介绍偏向锁的实现。 more >>
leetcode中有一题“Longest Palindromic Substring” 是寻找字符串中的最长回文子串。方法有中心扩张、Manachar算法,中心扩张方法的时间复杂度为O(),而Manachar算法将时间复杂度减少至O()。下面将介绍这两种方法。 more >>
在服务端中,当客户端接入完成连接后,会将NioSocketChannel的注册事件修改为OP_READ,从而进行消息的监听,“见netty - 客户端接入分析”一文的步骤3.2。在客户端中,当完成连接后,也会将注册事件修改为OP_READ,进行消息的监听工作,见“netty - 客户端创建分析”一文的步骤6。下面将分析注册事件为OP_READ时,消息究竟是如何读取的。 more >>
对于每个EventLoop而言,EventLoop线程除了负责I/O的读写事件,还负责处理系统Task以及定时Task
1 | //taskQueue为LinkedBlockingQueue,任务队列,存储普通任务 |
Netty服务端启动时,通常会有两个NioEventLoopGroup:一个bossGroup,一个workerGroup。其中bossGroup为Acceptor线程池,主要负责客户端的接入,workerGroup为I/O线程池,主要负责I/O操作,如下所示。
1 | // 配置服务端的NIO线程组 |
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true