• RxAndroid解析

    = 1460

    本文出自:【InTheWorld的博客】

    首先说明,RxAndroid其实并不是一个大项目,它更接近于一个RxJava在Android平台的一个补丁。不过这个霸气的名字却容易让人感觉这个一个平行的大项目。其实RxJava在Android上特殊性主要体现在UI线程的切换上,因为Android不允许普通线程更新UI。所以,RxAndroid的主要功能其实就是实现了AndroidSchedulers的功能。对于AndroidSchedulers这个类而言,我们最熟悉的用法便是AndroidSchedulers.mainThread()这个方法了。

    public final class Andro[......]

    Read more

  • RxJava原理之Scheduler

    = 1752

    本文出自:【InTheWorld的博客】

    线程的切换是RxJava一个重要的特性,并行运算和指定线程运行都是基于这种特性的。 其中,RxJava使用Scheduler类来抽象执行体(线程或者线程池)。而指定Scheduler的方式有observeOn()和subscribeOn()这两种。本文的标题是关于Scheduler原理方面的,但是直接去看Scheduler的实现其实是一种比较笨的办法。因为Scheduler其实是一个功能类,从使用方式上研究是一种更容易的方式。所谓的使用方式其实就是observeOn()和subscribeOn()这两个方法了。

    • observeOn方法

    废话少说[……]

    Read more

  • mDNS浅析及应用

    = 5081

    本文出自:【InTheWorld的博客】

    mDNS是multicast DNS,mDns实现了在局域网内的服务发现功能。mDNS协议应用非常广泛,其中苹果的Bonjour就是mDNS的一个实现,此外Android 4.1之后也加入了对mDNS协议的支持。那么不禁要问,mDNS是如何实现局域网内的服务发现功能的呢?其实答案就在问题中,multicast + DNS。

    mDNS协议基于多播网络技术,它工作于UDP的5353端口。mDNS选择多播作为其实现方式,是有一定原因的。首先 ,单播网络不适合用于局域网络的服务 ,因为单播是点对点的,而服务的信息却应该面向多个客户的。其次,广播也是有局限的[……]

    Read more

  • 线程同步技术之RCU

    = 1152

    本文出自:【InTheWorld的博客】

    多核程序设计其实挺困难的,就拿RCU(Read-Copy-Update)技术来说,我现在已经不知道自己看《深入理解并行编程》的RCU多少次了。到现在为止,还是有一些东西没有完全理解。这篇blog算是对我所领会到的RCU知识的暂时性总结。

    • RCU背景

    从个人的理解来讲,RCU其实是对rwLock的一种优化。从不区分读写的粗粒度锁到读写锁,然后到RCU机制,这就体现着并行程序设计的不断演进。rwLock的思路是,多线程读取不存在同步问题,所以放宽了读取锁,提高了并发读取的效率。而RCU的思路是,维持临界区多个版本(完整的非中间版本),同时取消读取[……]

    Read more

  • Java内存模型与volatile

    = 1201

    本文出自:【InTheWorld的博客】

    关于内存模型的问题,我以前写过一篇关于硬件内存模型的博客(多核程序设计——存储模型)。这篇blog主要分析了完全存储定序与部分存储定序的硬件存储模型。总的来说,硬件千奇百怪,内存模型五花八本,完全掌握这些CPU的脾气其实是件非常困难的事。Java作为一种跨平台的语言,实现统一的内存模型是非常有必要的。尤其是在并行程序非常常见的今天,一个良好定义的内存模型可以平衡开发效率与运行效率之间的矛盾。

    • Java内存模型

    Java内存模型的目的是为了给编程人员提供一个标准的设计接口,那么Java内存模型需要处理的问题有哪些呢?首先,一切问题都起源于人们对[……]

    Read more

  • Java多线程同步实现

    = 1401

    本文出自:【InTheWorld的博客】

    说实话,我在准备探究Java线程同步的实现原理时,并没有听说过AbstractQueuedSynchronizer。所以作为一个昨天才第一次听说的自旋锁实现方式,AQS成功地吸引了我。AQS的实现基于CLH锁(Craig, Landin, and Hagersten Lock),这种数据结构的特点在于把“临界数据”和“进程控制”同时实现。相比于我以前看到的方法,这种实现明显更加高效和简洁。在Java concurrent库中,AQS是最重要的基础之一。

    • AbstractQueuedSynchronizer的原理

    一个同步线程工具大致要实现以下[……]

    Read more

  • 基本线程同步总结(C与Java)

    = 1155

    本文出自:【InTheWorld的博客】

       《Posix多线程程序设计》是我读的第一本关于多线程程序设计的书籍。这本书生动且深刻地讲解了多线程程序设计的难点与Pthread库的使用方式,我从中收获颇丰。Pthread作为操作系统接口标准,直接用于应用层开发难免会让人感觉到有些单薄。Java对多线程程序设计模式进行了一定的封装,以方便大家的使用。然而在基础功能上,Java的多线程程序与Pthread其实非常相似,这也是这篇blog是使用这个标题的原因。

    • Mutex(Pthread) vs Lock/synchronized(Java)

      &[……]

    Read more

  • RxJava设计原理解析<3>

    = 1392

    本文出自:【InTheWorld的博客】

        在上一篇blog中,我们主要讨论了一些关于map和flatMap实现方面的知识。但是flatMap远比map复杂,flatMap涉及了merge算子方面的东西。所以这篇博文将重点分析merge算子的实现原理。merge算子的功能是把多个Observable整合到一起,并创建一个新的Observable。听起来这个功能其实并不是很难理解,merge就像两江交汇一般,把各支流的水汇聚到一起。《Learning Reactive Programming》一书中有非常形象的配图。下图就描述了merge的功能:

    image

    &n[……]

    Read more

  • RxJava设计原理与解析<2>

    = 997

    本文出自:【InTheWorld的博客】

    在上一篇blog中,我们通过一个简单的例子探索了RxJava的设计原理。而这篇博客的主要内容是研究RxJava的高阶算子。然而,RxJava中的高阶算子非常之多,每一个分析是不太现实的。所以,这篇文章的内容主要以map和flatMap为例,分析一下RxJava中算子的实现方式。

    • map算子的原理

    image

    有过函数式编程语言学习经验的同学大概对map算子都不会感到陌生。即使没有学习过functional programming,也大概听过MapReduce。map算子的功能是把一个值作为输入,对应地输出一个值,实现了
    “一一映射”的功能。在RxJav[……]

    Read more

  • RxJava设计原理与解析<1>

    = 1355

    本文出自:【InTheWorld的博客】

    RxJava即Reactive Java,是响应式编程范式在Java上的一种实现。响应式编程范式的目标是,提高程序的容错性、降低软件模块的耦合性、提高程序相应速度。到目前为止,几乎所有主流语言都有相应的reactive库。其中,RxJava在android的开发中,应用的非常广泛。我使用RxJava也有一两个月了,期间断断续续的学习了RxJava。坦诚的说,刚开始的时候确实有点晕。首先,这种相应式的编程范式确实比较新颖,其次,我很好奇RxJava背后的实现原理,但一时间又想不通。既然想不通,我就打算看源码来分析,所以就有了这篇blog。

    • RxJ[……]

    Read more

第 5 页,共 9 页« 最新...34567...最旧 »