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的开发源码-...
本项目"json-rpc-java-1.0"提供了JSON-RPC的Java实现,包含`jsonArray`和`jsonObject`等关键组件。 1. JSON基础知识: JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它的基本...
JAVA源码高性能RPC框架nfs-rpc
- **简单应用分析:**演讲中可能展示了如何使用JSON-RPC-Java构建一个简单的Web应用实例,包括应用架构、客户端与服务器端交互的过程等。 - **高级主题:** - 异步操作:如何实现客户端与服务器之间的异步通信。 -...
java资源高性能RPC框架 nfs-rpc提取方式是百度网盘分享地址
本压缩包“java源码:高性能RPC框架 nfs-rpc.rar”提供了基于Java实现的高性能RPC框架,名为nfs-rpc。这个框架旨在简化服务之间的通信,提高系统的整体效率。 1. **RPC基本概念** - RPC使得客户端能够透明地调用...
本实例源码是基于Java实现的高性能RPC框架——nfs-rpc,专为分布式系统设计,以提高服务之间的通信效率和可靠性。以下是关于这个框架的一些关键知识点: 1. **RPC基础**:RPC的核心思想是调用远程服务就像调用本地...
这个“json-rpc-java-1.0.1”压缩包很可能是Java实现的一个JSON-RPC客户端或服务器端库,版本号为1.0.1。在Java中,这样的库通常提供了方便的方法来处理JSON-RPC请求和响应,使得开发者能够跨网络调用远程服务,就像...
Java平台上的RPC框架有很多,如Hadoop的Hadoop RPC、Apache Thrift、Google的gRPC等,而“nfs-rpc”则是一个专门基于Java开发的高性能RPC框架。这个框架的设计目标是提供高效、稳定、易用的跨网络服务调用能力。 ...
总结,nfs-rpc是一个专为Java设计的高性能RPC框架,它的目标是简化分布式环境下的远程调用,提供高效的网络通信、服务发现和治理功能。通过理解和掌握nfs-rpc,开发者能够更轻松地构建和管理大规模的分布式系统。
本项目"nfs-rpc"是一个基于Java实现的高性能RPC框架,旨在提供高效、可靠且易用的服务调用解决方案。 在Java中,RPC框架如Hessian、Dubbo、gRPC等已经非常成熟,而nfs-rpc可能是针对特定场景或需求进行优化的版本。...
JSON-RPC-Java是一种允许从JavaScript端透明地调用远程Java方法的技术,从而实现了Web应用中的远程过程调用(Remote Procedure Call, RPC)。这种方法不仅简化了Web开发流程,而且提高了应用程序的性能与用户体验。 ...
总的来说,Java手写RPC框架涉及了网络编程、序列化、多线程、服务治理等多个领域的知识,是一个很好的学习和实践分布式系统设计的平台。通过这个项目,开发者不仅可以提升技术水平,还能对分布式系统的运行机制有更...
SOFA-RPC 是阿里巴巴开源的一款高性能、高可扩展性、企业级的Java远程过程调用(RPC)框架。它的设计目标是简化分布式服务之间的通信,提高系统的解耦性,并提供丰富的功能来支持微服务架构。在本文中,我们将深入...
在Java世界中,JSON-RPC作为一个高性能的开源RPC框架,为分布式系统中的服务调用提供了便利。这个框架允许应用程序通过网络在不同的进程之间传递方法调用,仿佛这些方法是在本地对象上调用一样。 JSON-RPC的核心...
gRPC 是一个高性能、开源、通用的 RPC 框架,面向移动和 HTTP/2 设计,是由谷歌发布的首款基于 Protocol Buffers 的 RPC 框架。 gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用...
该项目是一款基于Java开发的轻量级高性能RPC框架,源码包含282个文件,涵盖了138个Java源文件、63个XML配置文件、18个Shell脚本、13个Git忽略文件、12个HTML文件、11个属性文件、6个IML项目文件、5个JavaScript文件...
本源码是基于Java开发的SOFARPC高可扩展性高性能Java RPC框架设计,包含1466个文件,其中包括1202个....该项目是一个生产级的Java RPC框架,具有高可扩展性和高性能特点,在蚂蚁金服已经经历了十多年及五代版本的发展。
在IT行业中,gRPC是一个高性能、开源且语言无关的RPC框架,它基于HTTP/2协议设计,使用ProtoBuf(Protocol Buffers)作为接口定义语言。ProtoBuf是一种数据序列化协议,能够将结构化的数据序列化,可用于数据存储、...