`

高性能RPC(一)--java

 
阅读更多

RPC中的一些问题

1.数据协议

     序列化的方式(数据包的大小、序列化的优化)

     要支持更多的数据形式(xml,json等等)

      ---->自定义数据的协议头,自定义数据的结束。

2.IO模型

  2.1常见的IO模型

      ----->同步阻塞IO(Blocking IO):传统的IO模型

      ----->同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,

                      非阻塞的IO要求socket被设置为NONBLOCK.这里所说的NIO不是java不是java的NIO库(new io)

      ----->IO多路复用(IO Multiplexing):Reactor设计模式 也称为异步阻塞IO。

                                        java中的Selector和linux中的epoll都是这种模式

      ----->异步IO(Asynchronous IO) :Proactor设计模式 异步非阻塞IO。

      

  2.2同步和异步 : 用户线程和内核的交互方式

      ---->同步是指用户线程发起IO请求后,需要等待或者轮询你IO操作完成后才能继续执行

      ---->异步是指用户线程发起IO请求后,继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册回调函数

      

  2.3阻塞和非阻塞

           用户线程调用内核IO操作的方式,阻塞是指IO操作需要彻底完成后才能返回到用户空间,

          非阻塞是指IO操作被调用后立即返回用户一个状态,无需等到IO操作彻底完成后

          

          

  2.4 同步阻塞IO

   用户线程通过系统调用read发起IO操作,由用户空间转换到内核空间,

   内核等待数据包达到后,然后将接收到的数据拷贝到用户空间,完成read操作

      伪代码:{

        read(socket,buffer);

        process(buffer)

    }

    

  用户需要等待read将socket中的数据读取到buffer后,才能继续处理接收的数据,

  整个IO请求的过程中,用户线程是被苏泽的,导致用户在发起IO请求时,不能做

  任何事情,对CPU利用不够。

  

   2.5同步非阻塞IO

      在同步阻塞IO的基础上将Socket设置NONBLOCK。这样做用户线程可以在发起IO请求后立即返回.

    用户线程需要不断的发起IO请求,直到数据达到后,才能真正读取到数据,继续执行

     伪代码:{

     while(read(socket,buffer)!=SUCCESS){

        process(buffer);

     }

   }

   户线程可以在发起IO请求后立即返回.但是为了得到数据,仍需要不断轮询,重复请求,

  消耗了大量的CPU资源。很少直接使用这种模型

  

  

  2.6 多路复用IO

      IO多路复用建立在内核提供的多路分离函数select基础之上的,使用select

           函数可以避免同步非阻塞IO模型中的轮询等待问题。

          

      用户首先将需要进行的IO操作的socket添加到select中,然后阻塞等待select系统调用返回。

      当数据达到时,socket被激活,select函数返回。用户线程正式发起read请求,读取数据并

     继续执行 看起来比同步阻塞模型效率更差。但是,使用select以后最大的优势是用户可以

    在一个线程内同时处理多个socket的io请求,用户可以注册同个socket,然后不断调用select

    读取被激活的socket.达到同一个线程内同时处理多个IO请求

      伪代码{

         select(socket);

         while(1){

            sockets = select();

            for(Socket socket : sockets){

                if(can_read(socket)){

                   read(socket,buffer);

                   process(buffer);

                }

            }

         }

    }

    

    IO多路复用模型使用了Reactor设计模式实现了这一机制

    

    

   2.7 异步IO

         “真正“的异步IO需要操作系统更强的支持.

         异步IO模型中,当用户线程收到通知时,数据已经被内核读取完毕,并放在了用户线程

         指定的缓存区内,内核在IO完成后通知用户线程直接使用即可。

         

         

      操作系统支持并非特别完善,更多采用的是IO多路复用模拟异步IO方式

                                        

3.线程模型

分享到:
评论

相关推荐

    基于java的开发源码-高性能RPC框架 nfs-rpc.zip

    基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-...

    json-rpc-java-1.0源代码

    本项目"json-rpc-java-1.0"提供了JSON-RPC的Java实现,包含`jsonArray`和`jsonObject`等关键组件。 1. JSON基础知识: JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它的基本...

    JAVA源码高性能RPC框架nfs-rpc

    JAVA源码高性能RPC框架nfs-rpc

    json-rpc-java-talk-20050225.pdf

    - **简单应用分析:**演讲中可能展示了如何使用JSON-RPC-Java构建一个简单的Web应用实例,包括应用架构、客户端与服务器端交互的过程等。 - **高级主题:** - 异步操作:如何实现客户端与服务器之间的异步通信。 -...

    java资源高性能RPC框架nfs-rpc

    java资源高性能RPC框架 nfs-rpc提取方式是百度网盘分享地址

    java源码:高性能RPC框架 nfs-rpc.rar

    本压缩包“java源码:高性能RPC框架 nfs-rpc.rar”提供了基于Java实现的高性能RPC框架,名为nfs-rpc。这个框架旨在简化服务之间的通信,提高系统的整体效率。 1. **RPC基本概念** - RPC使得客户端能够透明地调用...

    基于Java的实例源码-高性能RPC框架 nfs-rpc.zip

    本实例源码是基于Java实现的高性能RPC框架——nfs-rpc,专为分布式系统设计,以提高服务之间的通信效率和可靠性。以下是关于这个框架的一些关键知识点: 1. **RPC基础**:RPC的核心思想是调用远程服务就像调用本地...

    json-rpc-java-1.0.1

    这个“json-rpc-java-1.0.1”压缩包很可能是Java实现的一个JSON-RPC客户端或服务器端库,版本号为1.0.1。在Java中,这样的库通常提供了方便的方法来处理JSON-RPC请求和响应,使得开发者能够跨网络调用远程服务,就像...

    基于Java的高性能RPC框架 nfs-rpc.zip

    Java平台上的RPC框架有很多,如Hadoop的Hadoop RPC、Apache Thrift、Google的gRPC等,而“nfs-rpc”则是一个专门基于Java开发的高性能RPC框架。这个框架的设计目标是提供高效、稳定、易用的跨网络服务调用能力。 ...

    基于java的高性能RPC框架 nfs-rpc.zip

    总结,nfs-rpc是一个专为Java设计的高性能RPC框架,它的目标是简化分布式环境下的远程调用,提供高效的网络通信、服务发现和治理功能。通过理解和掌握nfs-rpc,开发者能够更轻松地构建和管理大规模的分布式系统。

    基于Java的源码-高性能RPC框架 nfs-rpc.zip

    本项目"nfs-rpc"是一个基于Java实现的高性能RPC框架,旨在提供高效、可靠且易用的服务调用解决方案。 在Java中,RPC框架如Hessian、Dubbo、gRPC等已经非常成熟,而nfs-rpc可能是针对特定场景或需求进行优化的版本。...

    利用JSON-RPC-Java构建下一代Web应用程序

    JSON-RPC-Java是一种允许从JavaScript端透明地调用远程Java方法的技术,从而实现了Web应用中的远程过程调用(Remote Procedure Call, RPC)。这种方法不仅简化了Web开发流程,而且提高了应用程序的性能与用户体验。 ...

    java 手写rpc框架 rpc-server and rpc-client

    总的来说,Java手写RPC框架涉及了网络编程、序列化、多线程、服务治理等多个领域的知识,是一个很好的学习和实践分布式系统设计的平台。通过这个项目,开发者不仅可以提升技术水平,还能对分布式系统的运行机制有更...

    sofa-rpc,sofarpc是一个高性能、高扩展性、生产级的java rpc框架。.zip

    SOFA-RPC 是阿里巴巴开源的一款高性能、高可扩展性、企业级的Java远程过程调用(RPC)框架。它的设计目标是简化分布式服务之间的通信,提高系统的解耦性,并提供丰富的功能来支持微服务架构。在本文中,我们将深入...

    jsonrpc是一个基于Java的高性能开源RPC框架

    在Java世界中,JSON-RPC作为一个高性能的开源RPC框架,为分布式系统中的服务调用提供了便利。这个框架允许应用程序通过网络在不同的进程之间传递方法调用,仿佛这些方法是在本地对象上调用一样。 JSON-RPC的核心...

    grpc-java-1.9.0.tar.gz_gRPC-java_java Tcp _谷歌 RPC 框架

    gRPC 是一个高性能、开源、通用的 RPC 框架,面向移动和 HTTP/2 设计,是由谷歌发布的首款基于 Protocol Buffers 的 RPC 框架。 gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用...

    基于Java实现的轻量级高性能RPC框架设计源码

    该项目是一款基于Java开发的轻量级高性能RPC框架,源码包含282个文件,涵盖了138个Java源文件、63个XML配置文件、18个Shell脚本、13个Git忽略文件、12个HTML文件、11个属性文件、6个IML项目文件、5个JavaScript文件...

    基于Java的SOFARPC高可扩展性高性能Java RPC框架设计源码

    本源码是基于Java开发的SOFARPC高可扩展性高性能Java RPC框架设计,包含1466个文件,其中包括1202个....该项目是一个生产级的Java RPC框架,具有高可扩展性和高性能特点,在蚂蚁金服已经经历了十多年及五代版本的发展。

    protoc+protoc-gen-grpc-java

    在IT行业中,gRPC是一个高性能、开源且语言无关的RPC框架,它基于HTTP/2协议设计,使用ProtoBuf(Protocol Buffers)作为接口定义语言。ProtoBuf是一种数据序列化协议,能够将结构化的数据序列化,可用于数据存储、...

Global site tag (gtag.js) - Google Analytics