learn.lianglianglee.com/专栏/Netty 核心原理剖析与 RPC 实践-完/index.html
2022-08-14 03:40:33 +08:00

202 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>note-submit</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/PDF">PDF</a>
</li>
<li>
<a href="/专栏">专栏</a>
</li>
<li>
<a href="/恋爱必修课">恋爱必修课</a>
</li>
<li>
<a href="/文章">文章</a>
</li>
<li>
<a href="/极客时间">极客时间</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content"
style="max-width: 960px; margin: 0 auto; overflow-x: auto; overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><!--add content-->
<h1>Netty 核心原理剖析与 RPC 实践-完</h1>
<ul>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\00 学好 Netty是你修炼 Java 内功的必经之路.md.html'>00 学好 Netty是你修炼 Java 内功的必经之路</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\01 初识 Netty为什么 Netty 这么流行?.md.html'>01 初识 Netty为什么 Netty 这么流行?</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\02 纵览全局:把握 Netty 整体架构脉络.md.html'>02 纵览全局:把握 Netty 整体架构脉络</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\03 引导器作用:客户端和服务端启动都要做些什么?.md.html'>03 引导器作用:客户端和服务端启动都要做些什么?</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\04 事件调度层:为什么 EventLoop 是 Netty 的精髓?.md.html'>04 事件调度层:为什么 EventLoop 是 Netty 的精髓?</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\05 服务编排层Pipeline 如何协调各类 Handler .md.html'>05 服务编排层Pipeline 如何协调各类 Handler </a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\06 粘包拆包问题:如何获取一个完整的网络包?.md.html'>06 粘包拆包问题:如何获取一个完整的网络包?</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\07 接头暗语:如何利用 Netty 实现自定义协议通信?.md.html'>07 接头暗语:如何利用 Netty 实现自定义协议通信?</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\08 开箱即用Netty 支持哪些常用的解码器?.md.html'>08 开箱即用Netty 支持哪些常用的解码器?</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\09 数据传输writeAndFlush 处理流程剖析.md.html'>09 数据传输writeAndFlush 处理流程剖析</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\10 双刃剑:合理管理 Netty 堆外内存.md.html'>10 双刃剑:合理管理 Netty 堆外内存</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\11 另起炉灶Netty 数据传输载体 ByteBuf 详解.md.html'>11 另起炉灶Netty 数据传输载体 ByteBuf 详解</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\12 他山之石:高性能内存分配器 jemalloc 基本原理.md.html'>12 他山之石:高性能内存分配器 jemalloc 基本原理</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\13 举一反三Netty 高性能内存管理设计(上).md.html'>13 举一反三Netty 高性能内存管理设计(上)</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\14 举一反三Netty 高性能内存管理设计(下).md.html'>14 举一反三Netty 高性能内存管理设计(下)</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\15 轻量级对象回收站Recycler 对象池技术解析.md.html'>15 轻量级对象回收站Recycler 对象池技术解析</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\16 IO 加速:与众不同的 Netty 零拷贝技术.md.html'>16 IO 加速:与众不同的 Netty 零拷贝技术</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\17 源码篇:从 Linux 出发深入剖析服务端启动流程.md.html'>17 源码篇:从 Linux 出发深入剖析服务端启动流程</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\18 源码篇:解密 Netty Reactor 线程模型.md.html'>18 源码篇:解密 Netty Reactor 线程模型</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\19 源码篇:一个网络请求在 Netty 中的旅程.md.html'>19 源码篇:一个网络请求在 Netty 中的旅程</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\20 技巧篇Netty 的 FastThreadLocal 究竟比 ThreadLocal 快在哪儿?.md.html'>20 技巧篇Netty 的 FastThreadLocal 究竟比 ThreadLocal 快在哪儿?</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\21 技巧篇:延迟任务处理神器之时间轮 HashedWheelTimer.md.html'>21 技巧篇:延迟任务处理神器之时间轮 HashedWheelTimer</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\22 技巧篇:高性能无锁队列 Mpsc Queue.md.html'>22 技巧篇:高性能无锁队列 Mpsc Queue</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\23 架构设计:如何实现一个高性能分布式 RPC 框架.md.html'>23 架构设计:如何实现一个高性能分布式 RPC 框架</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\24 服务发布与订阅:搭建生产者和消费者的基础框架.md.html'>24 服务发布与订阅:搭建生产者和消费者的基础框架</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\25 远程通信:通信协议设计以及编解码的实现.md.html'>25 远程通信:通信协议设计以及编解码的实现</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\26 服务治理:服务发现与负载均衡机制的实现.md.html'>26 服务治理:服务发现与负载均衡机制的实现</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\27 动态代理:为用户屏蔽 RPC 调用的底层细节.md.html'>27 动态代理:为用户屏蔽 RPC 调用的底层细节</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\28 实战总结RPC 实战总结与进阶延伸.md.html'>28 实战总结RPC 实战总结与进阶延伸</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\29 编程思想Netty 中应用了哪些设计模式?.md.html'>29 编程思想Netty 中应用了哪些设计模式?</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\30 实践总结Netty 在项目开发中的一些最佳实践.md.html'>30 实践总结Netty 在项目开发中的一些最佳实践</a></li>
<li><a href = '\专栏\Netty 核心原理剖析与 RPC 实践-完\31 结束语 技术成长之路:如何打造自己的技术体系.md.html'>31 结束语 技术成长之路:如何打造自己的技术体系</a></li>
</ul>
</div>
</div>
<div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194"
integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw=="
data-cf-beacon='{"rayId":"70996b2f083d3d60","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}'
crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>