Aiden Blog

Netty 教程 | Netty 框架结构介绍

介绍 : netty 作为 java 方面的网络通信框架一直在各个系统中被广泛应用。 在这里总结整理了下它的内部原理以及架构组织。 netty 主要用来应用在 socket 通信方面,其它基础方面的资料可以参考我之前的文档: 网络方面的资料可以阅读 : 网络部分相关. IO模型方面的资料可以阅读 : IO 的分类比较 Java NIO方面的应用可以阅读 : Java NI...

Linux 教程 | Linux 平台IO技术

用户空间以及内核空间概念 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。 操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核,保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。 针对linux操作系...

杂谈 | (Cloud Native)云原生的设计哲学

云原生一词已经被过度的采用,很多软件都号称是云原生,很多打着云原生旗号的会议也如雨后春笋般涌现。 云原生本身甚至不能称为是一种架构,它首先是一种基础设施,运行在其上的应用称作云原生应用,只有符合云原生设计哲学的应用架构才叫云原生应用架构。 云原生的设计理念 云原生系统的设计理念如下: 面向分布式设计(Distribution) :容器、微服务、API 驱动的开发; 面向配置...

C++ 教程 | C11 智能指针

由于 C++ 语言没有自动内存回收机制,程序员每次new出来的内存都要手动delete。程序员忘记delete,流程太复杂,最终导致没有delete,异常导致程序过早退出,没有执行delete的情况并不罕见。 对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。所有智能指针都重载了operator->操作符,直...

C++ 教程 | C11 中的右值问题

左值与右值 左值和右值,最早是从 C 语言继承而来的。在 C 语言或者继承版本的解释中。 左值是可以位于赋值运算符=左侧的表达式(当然,左值也可以位于=的右侧) 右值是不可以位于赋值运算符=左侧的表达式。 对于这个经典的解释,我们有如下示例 int foo(42); int bar(43); // foo, bar 都是左值 foo = bar; bar = foo; ...

maven 教程 | maven 入门介绍

1. pom 文件的信息 pom.xml 是 mvn 工程的核心文件, mvn 是通过 pom 文件来维护工程。 下面是 pom 文件的主要组成。 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h...

C++ 教程 | cpp 初始化过程那些事

默认初始化 什么是默认初始化? 默认初始化是指定义变量时没有指定初值时进行的初始化操作。例如 int a,Sales_data myData 等等。 这些变量被定义了而不是仅仅被声明(因为没有extern关键字修饰),而且没有显式的赋予初值。 特别的,如果采用动态分配内存的方式(即采用new关键字)创建的变量,不加括号时(如int *p=new int;)也是默认初始化,加了...

C++ 教程 | 头文件的作用与使用说明

C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件—— .cpp 文件和 .h 文件。其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码;而 .h 文件则被称作 C++ 头文件,里面放的也是 C++ 的源代码。 C++ 语言支持”分别编译“(separatecompilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的 .cp...

Spark 源码 | Spark On Yarn/k8s

本文通过阅读 Spark deploy 相关部分的代码,了解学习 spark 分布式资源调度的架构实现以及原理和细节。 参考的 spark 版本为 2.3.1. 在spark源码中,主要实现了三种分布式环境下的资源申请与作业调度方案,他们分别是 : yarn : https://github.com/Aiden-Dong/spark-2.3.1/tree/master/resou...

Spark 源码 | RPC 篇

本文通过阅读 Spark RPC 相关部分的代码,了解学习 spark RPC 的架构实现以及原理和细节。 参考的 spark 版本为 2.3.1. spark RPC 在实现上主要分为本地RPC与远程RPC通信。 本地 RPC 通信主要是以线程实现的异步通信方式,而远程RPC通信主要以netty实现的socket通信方式。 如下所示, NettyRpcEndpointRef 为R...