java并发编程:synchronized与对象头

java并发编程:synchronized与对象头

多线程提高了效率,但是也会出现同步的问题。为了解决这个问题,java提供了synchronized关键字和Lock类。

synchronized的使用

阅读更多
java并发编程:Thread类

java并发编程:Thread类

在学习java中对线程的支持之前,先了解线程的几种状态。

线程的几种状态

阅读更多
java并发编程:进程和线程

java并发编程:进程和线程

阅读更多
ThreadLocal源码分析

ThreadLocal源码分析

简介

ThreadLocal类可以使每个线程保存一份线程局部变量,也就是当前线程持有一个变量,各个线程之间的这个变量不受影响。一个线程可以有多个ThreadLocal实例。

阅读更多
dubbo入门

dubbo入门

简介

dubbo是一个高性能的rpc框架。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

阅读更多
RPC

RPC

简介

RPC(Remote Procedure Call)就是远程过程调用。

就是一台机器调用另外一台机器上的服务,比如想要执行一个函数,在另一台机器上执行完之后返回一个结果。

举一个简单的例子,机器A想要对一张图片进行一些渲染,但是它没有这个这个功能,却又知道机器B有这个功能,所以A将这张图片以及要执行的操作发送给机器B,B收到消息后处理图片,然后将处理后的结果发送给机器A,结束。

阅读更多
zookeeper之选举

zookeeper选举机制

在了解zookeeper选举机制之前需要了解一些其他知识

请求,事务,标识符

zookeeper服务器会在本地处理只读请求(exists、getData、getChildren),所以zookeeper在处理以只读请求为主的负载时,性能会很高。

那些会改变zookeeper状态的客户端请求(create、delete、setData、)会被转发到leader。leader执行相应的请求,完成状态的更新,称之为事务。

看一个例子:加入一个客户端提交了一个对/z节点的setData请求,setData会改变该znode的数据信息,并会增加该节点的版本号,因此这个请求的事务会有两个重要的字段:数据字段,新版本号。

阅读更多
zookeeper入门

zookeeper入门

概览

简介

ZooKeeper是分布式应用程序的分布式开源协调服务。它被设计成易于编程,并且使用了一种以文件系统的熟悉目录树结构为风格的数据模型。它在Java中运行,并支持Java和c。

设计目标

ZooKeeper允许分布式进程通过共享的分层命名空间相互协调,该命名空间的组织类似于标准文件系统。这些命名空间包括了数据,zookeeper称其为znodes——这些存储节点类似于文件和目录。与为存储而设计的典型文件系统不同,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟。

ZooKeeper的实现高度重视高性能高可用性严格有序的访问。zookeeper的高性能意味着它可以用在大型分布式系统中。可靠性方面防止它成为单点故障。严格的排序是一致性的保证之一。

阅读更多
netty事件传播机制

netty事件传播机制

netty是基于事件驱动的,因此事件在netty中十分重要。当数据进入和出去时会发生事件,而我们会定义多个handler来处理这些事件,那么这些事件发生的顺序是怎样的呢,netty又是怎么实现的。

在了解这些之前,需要了解几个类,ChannelHandler系列:包括ChannelOutboundHandlerChannelInboundHandler等,还需要了解ChannelPipelineChannelHandlerContext系列。

阅读更多
Netty入门

netty

简介

Netty项目是一个旨在为可维护的高性能高扩展性协议服务器和客户端的快速开发提供异步事件驱动的网络应用框架和工具。

Netty可以很简单的编写客户端服务端,并且对tcp,udp,http,ssl等有很好的支持。由于是异步的,所以性能很高。

事件驱动:事件驱动是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。也就是发生某件事情时,可以调用某些方法。在netty中需要适应事件驱动编程。

netty在java NIO之上进行了封装,使用更便捷,解决了空轮询的bug。

使用

阅读更多