Netty源码解读(四)Netty与Reactor模式

Reactors

一:Netty、NIO、多线程?

时隔很久终于又更新了!之前一直迟迟未动也是因为积累不够,后面比较难下手。过年期间@李林锋hw发布了一个Netty5.0架构剖析和源码解读 ,看完也是收获不少。前面的文章我们分析了Netty的结构,这次咱们来分析最错综复杂的一部分-Netty中的多线程以及NIO的应用。

理清NIO与Netty的关系之前,我们必须先要来看看Reactor模式。Netty是一个典型的多线程的Reactor模式的使用,理解了这部分,在宏观上理解Netty的NIO及多线程部分就不会有什么困难了。

本篇文章依然针对Netty 3.7,不过因为也看过一点Netty 5的源码,所以会有一点介绍。

阅读全文

Oracle官方并发教程之进程和线程

原文链接译文链接,译者:bjsuo,校对:郑旭东

在并发编程中,有两个基本的执行单元:进程和线程。在java语言中,并发编程最关心的是线程,然而,进程也是非常重要的。

阅读全文

Oracle官方并发教程之中断

原文链接译文链接译者: 蘑菇街-小宝   校对:梁海舰
中断是给线程的一个指示,告诉它应该停止正在做的事并去做其他事情。一个线程究竟要怎么响应中断请求取决于程序员,不过让其终止是很普遍的做法。这是本文重点强调的用法。
阅读全文

[Google Guava] 2.2-新集合类型

原文链接 译文链接 译者:沈义扬,校对:丁一

Guava引入了很多JDK没有的、但我们发现明显有用的新集合类型。这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念。作为一般规则,Guava集合非常精准地遵循了JDK接口契约。

Multiset

统计一个词在文档中出现了多少次,传统的做法是这样的:

[code lang=”java”]
Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word : words) {
Integer count = counts.get(word);
if (count == null) {
counts.put(word, 1);
} else {
counts.put(word, count + 1);
}
}
[/code]

这种写法很笨拙,也容易出错,并且不支持同时收集多种统计信息,如总词数。我们可以做的更好。
阅读全文

Oracle官方并发教程之不可变对象(定义不可变对象的策略)

原文链接译文链接,译者:Greenster,校对:郑旭东

以下的一些规则是创建不可变对象的简单策略。并非所有不可变类都完全遵守这些规则,不过这不是编写这些类的程序员们粗心大意造成的,很可能的是他们有充分的理由确保这些对象在创建后不会被修改。但这需要非常复杂细致的分析,并不适用于初学者。
阅读全文

招募译者翻译并发数据结构

什么是并发数据结构? 引用wiki上的定义

In computer science, a concurrent data structure is a particular way of storing and organizing data for access by multiple computing threads (or processes) on a computer.

简而言之,并发数据结构即允许多线程同时访问(读和写)的数据结构。

阅读全文

编译Lambda表达式: Scala和Java 8

原文地址译文地址,译者:梁海舰, 校对:丁一

最近几年Lambda表达式风靡于编程界. 很多现代编程语言都把它作为函数式编程的基本组成部分. 基于JVM的编程语言如Scala,Groovy还有Clojure把它们作为关键部分集成在语言中.现在Java8也加入了它们的行列.

阅读全文

Oracle官方并发教程之不可变对象

原文链接译文链接,译者:Greenster,校对:郑旭东

一个对象如果在创建后不能被修改,那么就称为不可变对象。在并发编程中,一种被普遍认可的原则就是:尽可能的使用不可变对象来创建简单、可靠的代码。
阅读全文

Oracle官方并发教程之一个同步类的例子

原文链接译文链接,译者:Greenster,校对:郑旭东

SynchronizedRGB是表示颜色的类,每一个对象代表一种颜色,使用三个整形数表示颜色的三基色,字符串表示颜色名称。
阅读全文

Oracle官方教程之Fork/Join

原文链接译文链接,译者:Zach,校对:郑旭东

fork/join框架是ExecutorService接口的一种具体实现,目的是为了帮助你更好地利用多处理器带来的好处。它是为那些能够被递归地拆解成子任务的工作类型量身设计的。其目的在于能够使用所有可用的运算能力来提升你的应用的性能。
阅读全文

Oracle官方并发教程

计算机的使用者一直以为他们的计算机可以同时做很多事情。他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理程序上工作。甚至对于单个应用程序,他们任然期待它能在在同一时间做很多事情。举个例子,一个流媒体播放程序必须能同时完成以下工作:从网络上读取数字音频,解压缩数字音频,管理播放和更新程序显示。甚至文字处理器也应该能在忙于重新格式化文本和刷新显示的情况下同时响应键盘和鼠标事件。这样的软件就被称为并发软件。

阅读全文

Java7 java.util.concurrent 并发包计划

原文链接译文链接,译者:DOM,校对:郑旭东

 Java7发布版本的具体计划应该开始了,之前经常有人问我们关于JSR166的后续计划包含哪些内容。下面是目前暂定的内容,欢迎提出你们的见
解和意见。

Oracle官方并发教程之锁对象

原文地址译文地址,译者:李任,校对:郑旭东

同步代码依赖于一种简单的可重入锁。这种锁使用简单,但也有诸多限制。java.util.concurrent.locks包提供了更复杂的锁。我们不会详细考察这个包,但会重点关注其最基本的接口,锁。

阅读全文

Oracle官方并发教程之原子变量

原文地址译文地址 ,译者:李任,校对:郑旭东

java.util.concurrent.atomic包定义了对单一变量进行原子操作的类。所有的类都提供了get和set方法,可以使用它们像读写volatile变量一样读写原子类。就是说,同一变量上的一个set操作对于任意后续的get操作存在happens-before关系。原子的compareAndSet方法也有内存一致性特点,就像应用到整型原子变量中的简单原子算法。

阅读全文

Oracle官方并发教程之并发集合

原文地址 译文地址  译者:李任  校对:方腾飞

java.util.concurrent包囊括了Java集合框架的一些附加类。它们也最容易按照集合类所提供的接口来进行分类:

  • BlockingQueue定义了一个先进先出的数据结构,当你尝试往满队列中添加元素,或者从空队列中获取元素时,将会阻塞或者超时。
  • ConcurrentMapjava.util.Map的子接口,定义了一些有用的原子操作。移除或者替换键值对的操作只有当key存在时才能进行,而新增操作只有当key不存在时。使这些操作原子化,可以避免同步。ConcurrentMap的标准实现是ConcurrentHashMap,它是HashMap的并发模式。
  • ConcurrentNavigableMap是ConcurrentMap的子接口,支持近似匹配。ConcurrentNavigableMap的标准实现是ConcurrentSkipListMap,它是TreeMap的并发模式。
  • 阅读全文

return top