基于Netty的高性能RPC框架Nifty(一)

1. 前言 Thrift是Facebook贡献给apache的rpc框架,但是这款框架的java版本在公司内部并不是那么受待见,因为其性能相比C++版本差了很多,但是后续基于netty重写了以后性能得到了极大的提升,相比于C++版本已经差距不大了。为此取了个新的名字Nifty = Netty + Thrift。 如果你使用过thrift的话,基本都会使用自动生成的代码,那真的是没法看,即使定义一个简单的类都会生成巨多的代码,把read,write方法全部写到里面去了。总之早期的thrfit各方面...阅读全文

服务端启动全解析 2020-10-04 00:00 服务端启动全解析

如何理解BIO、NIO、AIO的区别?

很多文章在谈论到BIO、NIO、AIO的时候仅仅是抛出一堆定义,以及一些生动的例子。看似很好理解。但是并没有将最基础的本质原理显现出来,如果没有没有从IO的原理出发的话是很难理解这三者之间的区别的。所以本篇文章从Java是如何进行IO操作为开头进行分析。 Java中的IO原理 首先Java中的IO都是依赖操作系统内核进行的,我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。 那内核是如何进行IO交互的呢? 网卡收到经过网线传来的网络数据,并将网络数据写到内存中。 ...阅读全文

juejin.cn 2019-11-01 00:00 juejin.cn

Java动态编译执行_zleven的博客

在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码。JAVA API提供了相应的工具(JavaCompiler)来实现动态编译。下面我们通过一个简单的例子介绍,如何通过JavaCompiler实现java代码动态编译。 一、获取JavaCompiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 获取JDK提供的java编译器,如果没有提供编译器,则返回null; 二、编译 //获取java文件管...阅读全文

CSDN博客_java 编译执行 2017-01-05 16:18 CSDN博客_java 编译执 等

Spring中集成Groovy的四种方式_蓝天之枫

groovy是一种动态脚本语言,适用于一些可变、和规则配置性的需求,目前Spring提供ScriptSource接口,支持两种类型,一种是 ResourceScriptSource,另一种是 StaticScriptSource,但是有的场景我们需要把groovy代码放进DB中,所以我们需要扩展这个。 ResourceScriptSource:在 resources 下面写groovy类 StaticScriptSource:把groovy类代码放进XML里 DatabaseScriptSour...阅读全文

CSDN博客 2020-09-27 09:05 CSDN博客

Alibaba之jvm

前言 在开始之前,我们先来模拟一下以下的场景: 小李:“小明,你的接口没有返回数据,麻烦帮忙看一下?” 小明:“我这边的数据也是从别人的服务器中拿到的,但是我不确定是因为逻辑处理有问题导致没有结果,还是因为我依赖的服务有问题而没有返回结果,我需要确认一下。” 小明:“哎呀,线上没有日志,我需要加个日志上个线。” 30 分钟之后…… 小明:“不好意思,日志加错地方了……稍等……” 接来下隆重登场的就是本文的主角 JVM SandBox 了。基于 JVM SandBox,我们可以很容易地做到在不重新...阅读全文

sandbox初体验 | 码农家园 2020-10-16 00:00 sandbox初体验 | 码农 等

linux shell 用sed命令在文本的行尾或行首添加字符 - aaronwxb

昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.file 在每行的头添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' test.file 在每行的行尾添加字符,比如“TAIL”,命令如下: sed 's/$/&TAIL/g' test.file 运行结果如下图: 几点说明: 1."^"代表行首,"$"代表行尾 2.'s/$...阅读全文

博客园 2011-08-19 10:17 博客园

ES分页看这篇就够了 - 云+社区

引言我们使用mysql的时候经常遇到分页查询的场景,在mysql中使用limit关键字来实现分页。比如下面的示例。select * from orders_history where type=8 limit 100,100; select * from orders_history where type=8 limit 1000,100; select * from orders_history where type=8 limit 10000,100;ElasticsSearch(以下简称E...阅读全文

腾讯云 2020-04-13 00:00 腾讯云

java的synchronized锁实现与Monitor(管程)机制_ystyaoshengting的专栏

在《操作系统同步原语》 这篇文章中,介绍了操作系统在面对 进程/线程 间同步的时候,所支持的一些同步原语,其中 semaphore 信号量 和 mutex 互斥量是最重要的同步原语。         在使用基本的 mutex 进行并发控制时,需要程序员非常小心地控制 mutex 的 down 和 up 操作,否则很容易引起死锁等问题。为了更容易地编写出正确的并发程序,所以在 mutex 和 semaphore 的基础上,提出了更高层次的同步原语 monitor,管程就可以对开发者屏蔽掉这些手动细...阅读全文

CSDN博客 2020-06-28 17:56 CSDN博客

JAVA并发(2)—PV机制与monitor(管程)机制

登录注册写文章首页下载APP抽奖JAVA并发(2)—PV机制与monitor(管程)机制小胖学编程关注赞赏支持JAVA并发(2)—PV机制与monitor(管程)机制在操作系统中,进程之间经常有互斥和协作两种关系,为了有效处理这两种情况,W.Dijkstra在1965年提出了信号量(semaphore 塞吗佛)和PV操作。 1. 信号量与PV机制 信号量是一种抽象的数据类型,由一个整型S变量和P原语、V原语组成(原语:即不可中断的过程)。并且这个整型变量只能由PV改变。 P(S)意味着S-1,若...阅读全文

简书 2021-06-16 10:56 简书

1.5w字,30图带你彻底掌握 AQS!

点击上方"云时代架构", 右上角选择“设为星标”精品技术文章准时送上!前言AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信、协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLock, ReadWriteLock), concurrent 包中的各种同步器(如 CountDownLatch, Semaphore, CyclicBarrier)都是基于 AQS 来构建,所以理解 AQS 的实现原理至关重要,AQ...阅读全文

墨天轮 2021-04-01 00:00 墨天轮

锁原理 - 信号量 vs 管程:JDK 为什么选择管程 - binarylei

锁原理 - 信号量 vs 管程:JDK 为什么选择管程 目录锁原理 - 信号量 vs 管程:JDK 为什么选择管程1. 并发编程解决方案 - 信号量 vs 管程1.1 相关概念1.2 信号量 vs 管程2. 信号量(Semaphere)2.1 原理2.2 代码实现2.3 使用场景2.3.1 互斥访问2.3.2 条件访问2.3.3 阻塞队列2. 管程(Monitor)2.1 MESA 模型2.2 互斥2.3 同步2.4 wait() 的正确姿势2.5 notify() 何时可以使用2.6 AQS ...阅读全文

博客园 2020-03-22 08:29 博客园

Java并发基石——所谓“阻塞”:Object Monitor和AQS(2)_JAVA入门中

(接上文《Java并发基石——所谓“阻塞”:Object Monitor和AQS(1)》) 3、AQS 上文我们较为详细的介绍了Java线程调度中的Object Monitor机制以及其工作情况,本文我们开始介绍Java线程调度中的另一种实现机制AQS,包括它的使用方式和底层工作原理。 3.1、AQS介绍 JAVA中的AQS队列从根本上来讲是基于CAS的典型实现(也是使用volatile关键字的典型案例)。从技术层面的依赖关系上讲它首先依赖于java中的java.util.concurrent....阅读全文

CSDN博客 2018-12-31 18:15 CSDN博客

Java并行编程-lock中使用多条件condition(生产者消费者模式实例)_记忆力不好的博客

Java 并发包下的提供Lock,Lock相对于Synchronized可以更好的解决线程同步问题,更加的灵活和高效,并且ReadWriteLock锁还能实现读、写的分离。但线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。阻塞队列(BlockingQueue)就是使用condition的和lock实现的。可以查看:Java并发编程-阻塞队列(BlockingQueue)的实现原理 Condition 那么引入本篇的主角,Condition,Condit...阅读全文

CSDN博客 2016-06-05 23:37 CSDN博客

JDK动态代理与运行时织入字节码

blog.csdn.net/u010061691/…java jdk动态代理其实是动态生成字节码与反射机制的一个结合,说到反射机制很多人都用到过反射,只要得到对应类的Class对象即可,调用方法,获取成员变量等等,那么jdk的动态代理就是在程序运行的过程中,动态的将我们维护的检查性的代码,放在正常的业务代码之前,那么怎么调用我正常的业务代码呢,因为业务可能有很多种,也就是说可能会有不同的类,但是都要执行相同的检查性代码,如我们要取钱,或者是修改身份证,都必须验证通过才可以,这显然是两个类,一个是...阅读全文

juejin.cn 2019-09-30 00:00 juejin.cn

CGI编程---简单实例_Gaoy9303的博客

要实现的效果:输入两个数,点击确定后,跳转页面显示二者的和 html代码: <html>          <head>         <TITLE>CGI1:hello CGI</TITLE>     </head>          </body>             <form action="cgi-bin/cgi_add.cgi">         <p> 请在下面填入数A 和 数B,按下确定后,可以获得二数相加的结果<br> A:<input name="num_a"  siz...阅读全文

CSDN博客 2017-06-13 16:45 CSDN博客

apache中如何调用CGI脚本

写博客 CSDN 中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。 教程 文章 帮助 视频 讨论 ManageOne运维监控数据一站式集成 Python应用篇 基于华为云Stack的云管平台开发实践 华为云专家_开发者中心-华为云 SDK_开发者中心-华为云 云创校园计划_开发者中心-华为云 编写训练代码 标准页面 配置脚本图元 一站式电商性能测试实战 应用性能管...阅读全文

华为云 2021-02-07 01:39 华为云

LDAP入门

LDAP入门LDAP入门 首先要先理解什么是LDAP,当时我看了很多解释,也是云里雾里,弄不清楚。在这里给大家稍微捋一捋。 首先LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。在这套标准下,AD(Active Directory)是微软出的一套实现。 那AD是什么呢?暂且把它理解成是个数据库。也有很多人直接把LDAP说成数据库(可以把LDAP理解成存储数据的数据库)。像是其他数据库一样,LDAP也是有client端和server端。server端是用来存放资源,cl...阅读全文

简书 2021-06-14 20:48 简书