zoukankan      html  css  js  c++  java
  • netty之RPC闲谈

    RPC调用的三个主题,

    1. 数据协议,好的数据协议编码后的码流小,利于网络传输,在编解码的过程中占用CPU少,并且跨平台的。例如java自带的序列化反序列化就是不跨平台。

    2.IO模型, bio、nio、aio,JDK1.5之后nio采用了epoll模式,netty就是基于这个NIO做的,比较出名的是 零拷贝(直接内存,不走jvm的堆),

      什么direct buffer之类的,直接内存不是在jvm管理的范围内,是非托管操作的,jvm里面也是可以设置的。

    3. 线程模型,(监听的事儿NIO走了,监听之后处理通道的消息的执行有线程模型的说法)对于tcp连接消息的读取、发送、编解的处理,

      单线程模型一个一个地处理连接,这样还是很慢,

          多线程模型可以并发地处理多个连接(进入线程池,线程池维持一个任务队列和N个可用线程),

         nio线程接受连接是一个线程,但是连接量大的时候还是不行(很多连接可能需要做一些安全认证),接受连接也做一个线程池(accept pool),处理连接也是多线程

      ps:accept阶段的叫IO线程,reactor阶段的也叫io线程 ,后面是soa框架或者类似catalina框架处理请求、响应请求也有线程模型(工作者线程),例如dubbo,dubbo会对什么场景下直接在io线程里面处理掉,或者在工作线程里面处理。

        详见: http://www.infoq.com/cn/articles/netty-high-performance

    Netty在并发编程上的小技巧:

    1.多用volatile,实现多个线程间数据更改的同步,无锁设计,同时又能做到set /get线程安全

    2.多用cas,例如atomicInteger里面的加加减减。

    3.多用线程安全的容器(里面也会充分利用第一、二点)

    4.多用读写锁提高并发性(读读共享,读写互斥,写写互斥)

    参考: https://www.zhihu.com/question/25536695/answer/109977506 (谁能用通俗的语言解释一下什么是 RPC 框架?)

  • 相关阅读:
    poj3468(A Simple Problem with Integers)线段树+树状数组
    关于JVM——JVM内存模型
    关于JVM——类加载机制
    关于JVM(二)
    关于JVM(一)
    关于LongAdder
    关于Future
    关于Fork/Join
    关于Atomic
    关于LockSupport
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/6559889.html
Copyright © 2011-2022 走看看