Chandy Lamport算法及其应用(exactly once)

1. Chandy lamport算法简介1.1 补充知识

先普及个概念(取自维基百科):

Snaphot algorithm:

A snapshot algorithm is used to create a consistent snapshot of the global state of a distributed system. Due to the lack of globally shared memory and a global clock, this isn't trivially possible.

今天讨论的chandy and larmpor......

Sync Flood与三次握手

1. Sync Flood

是一种拒绝服务攻击,原理是利用三次握手的过程进行攻击。正常三次握手的时候,服务器返回SYNC+ACK给客户端时需要有个半连接队列。攻击者伪造大量不同源的TCP SYNC包即可让半连接队列填满导致DOS。

2 . 解决方案SYNC Cookie

原理:第三次握手的时候不存放半连接队列。根据收到的信息结合IP、端口等包信息利用MAC函数和SHA1计算出一个SYNC cookie发送给客户端。最后收到ack的时候在校验cookie即可。

总体思路就是知道一个防伪造的cookie

具体算法流程可以参考下别人的文章:SYN Cookie的原理和实......

使用火焰图(FlameGraph)分析性能热点

1. 介绍

火焰图是一个可视化工具,可以将诸多性能检测相关的命令行工具的结果进行可视化展示,方便侦测性能热点。其支持将以下工具的采样结果进行可视化展示:

Linux: perf, eBPF, SystemTap, and ktap

Solaris, illumos, FreeBSD: DTrace

Mac OS X: DTrace and Instruments

Windows: Xperf.exe

本文以perf为例介绍(关于perf的用法可以参考perf examples如何在Linux上采集性能数据并且生成火焰图。

因为我们采集的是JAVA进程,perf......

正确使用Object.wait和Object.notify

1. 前言

现在的代码实现里面几乎不用Object.wait和Object.notify了,但是对其进行学习还是有助于理解为啥他们被Locksupport.park和unpark替换了。

2. 使用汇总

关于完整使用,参考文章:如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

文章中使用wait的生产者和消费者例子可以看看。

主要要点是:

对需要线程间互斥的对象用synchronized,持有其监视器锁

永远在循环(loop)里调用 wait 和 notify, 主要避免条件不满足是就被虚假唤醒,......

聊聊Locksupport

1. 为啥有Locksuppot

看看Locksupport的源码中的注释可知,Locksupport是实现别的锁和同步类的基本原语。

Basic thread blocking primitives for creating locks and other synchronization classes.

该类native实现是依靠posix OS接口来搞的(pthread.h),类似以前操作系统课程学习的互斥锁。

class Parker : public os::PlatformParker {

private:

volatile int _counter ;

.........