QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 单片机菜鸟博哥CSDN 1.前言 废话少说,本篇博文的目的就是深入学习 WifiManager 这个github上非常火爆的ESP8266 web配网库,让初学者不再对web配网感到迷茫,并且通过学习第三方库来自定义自己的web配网功能.等你学习整篇博文,你会发现 So easy!! 2.WiFiManager 2.1 WiFiManager源码地址 直接点击 github 下载代码 2.2 WiFiMana…
前言 前端时间看了看t-io的websocket部分源码,于是抽时间看了看websocket的握手和他的通讯机制.本篇只是简单记录一下websocket握手部分. WebSocket握手 好多人都用过websocket,不过有的都是在框架之上,只知道连接某个地址,然后调用js API就可以使用websocket了.但是通过阅读t-io的源码才稍微有点明白,服务端到底做了什么.将t-io的websocket demo运行起来之后,我们看一下请求. 可以看到,请求头部分: Connection:Up…
基本概念 1.Registe 一一服务注册当eureka Client向Eureka Server注册时,Eureka Client提供自身的元数据,比如IP地址.端口.运行状况指标的Uri.主页地址等信息.2.Renew一一服务续约Eureka lient在默认的情况下会每隔30秒发送一次心跳来进行服务续约,代表自己依然存活.如果eureka server在90秒内没有收到心跳消息,将eureka client从实例注册列表中删除.3.Fetch Registries一一获取服务注册列表信息E…
1.概述 ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小. 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小.它总是至少等于列表的大小(如果不指定capacity,默认是10). ? 1 2 3 4 5 6    /**      * Constructs an empty list with an initial cap…
Thinkphp6源码解析之分析 路由篇-请求流程 0x00 前言: 第一次写这么长的博客,所以可能排版啊,分析啊,什么的可能会比较乱.但是我大致的流程已经觉得是说的够清楚了.几乎是每行源码上都有注释.关于请求流程大概是: 入口文件先实例化容器,然后再通过容器去获取到Http对象 (Web管理类),然后执行Http对象中的run方法. 方法内会创建一个Request对象,然后将对象绑定到容器内.然后再到runWithRequest方法,执行应用程序 runWithRequest方法内会初始化当前…
[源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并行训练 1.1 分布式并行训练的必要 1.2 分布式训练 1.3 训练并行机制 1.3.1 三种机制 1.3.2 如何使用 1.4 数据并行训练 0x02 通信 & 架构 2.1 方法和架构 2.2 异步 vs 同步 0x03 具体架构 3.1 MapReduce 3.2 参数服务器 (PS) 3.…
学习路线: http://www.cnblogs.com/skywang12345/ 总结 1 总体框架 2 Collection架构 3 ArrayList详细介绍(源码解析)和使用示例 4 fail-fast总结(通过ArrayList来说明fail-fast的原理.解决办法) 5 LinkedList详细介绍(源码解析)和使用示例 6 Vector详细介绍(源码解析)和使用示例 7 Stack详细介绍(源码解析)和使用示例 8 List总结(LinkedList, ArrayList等使用…
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-24机器学习实战(Machine Learning in Action,@author: Peter Harrington)源码下载地址:https://www.manning.com/books/machine-learning-in-actiongit@github.com:pbharrin/ma…
说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了session中间件\Illuminate\Session\Middleware\StartSession::class,并通过该中间件来设计session,这个中间件的主要工作分为三步:(1)启动session,通过session handler从一些存储介质如redis中读取session值;(…
目录 为什么要使用ConcurrentHashMap? ConcurrentHashMap的结构特点 Java8之前 Java8之后 基本常量 重要成员变量 构造方法 tableSizeFor put方法存值 putVal initTable treeifyBin tryPresize transfer get方法取值 get 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与…
目录 ArrayBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e) 阻塞式插入 E poll(timeout, unit) 阻塞式超时获取 boolean offer(e, timeout, unit) 阻塞式超时插入 其他常规操作 boolean offer(E e) E poll() Boolean remove(Object o) 总结 参考阅读 系列传送门…
目录 LinkedBlockingQueue概述 类图结构及重要字段 构造器 出队和入队操作 入队enqueue 出队dequeue 阻塞式操作 E take() 阻塞式获取 void put(E e) 阻塞式插入 E poll(timeout, unit) 阻塞式超时获取 boolean offer(e, timeout, unit) 阻塞式超时插入 其他常规操作 boolean offer(E e) E poll() E peek() Boolean remove(Object o) 总结…
目录 PriorityBlockingQueue概述 类图结构及重要字段 什么是二叉堆 堆的基本操作 向上调整void up(int u) 向下调整void down(int u) 构造器 扩容方法tryGrow 源码中向上调整和向下调整实现 siftUpComparable siftDownComparable heapify建堆or堆化 put非阻塞式插入 take阻塞式获取 remove移除指定元素 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSy…
目录 DelayQueue概述 类图及重要字段 Delayed接口 Delayed元素案例 构造器 put take first = null 有什么用 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与释放 Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别 Java并发包源码学习系列:ReentrantLock可重入独占锁详解 Java并发包源码学习系列:…
目录 SynchronousQueue概述 使用案例 类图结构 put与take方法 void put(E e) E take() Transfer 公平模式TransferQueue QNode transfer awaitFulfill tryCancel clean TransferQueue总结 非公平模式TransferStack SNode transfer TransferStack总结 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSync…
目录 LinkedTransferQueue概述 TransferQueue 类图结构及重要字段 Node节点 前置:xfer方法的定义 队列操作三大类 插入元素put.add.offer 获取元素take.poll transfer.tryTransfer xfer三大流程 xfer tryAppend awaitMatch LinkedTransferQueue使用案例 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并…
目录 LinkedBlockingDeque概述 类图结构及重要字段 linkFirst linkLast unlinkFirst unlinkLast unlink 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与释放 Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别 Java并发包源码学习系列:ReentrantLock可重入独占锁详解 Java并发包…
目录 非阻塞并发队列ConcurrentLinkedQueue概述 结构组成 基本不变式 head的不变式与可变式 tail的不变式与可变式 offer操作 源码解析 图解offer操作 JDK1.6 hops设计意图 poll操作 源码解析 图解poll操作 总结 参考阅读 非阻塞并发队列ConcurrentLinkedQueue概述 我们之前花了很多时间了解学习BlockingQueue阻塞队列接口下的各种实现,也大概对阻塞队列的实现机制有了一定的了解:阻塞 + 队列嘛. 而且其中绝大部分是…
目录 ThreadPoolExecutor概述 线程池解决的优点 线程池处理流程 创建线程池 重要常量及字段 线程池的五种状态及转换 ThreadPoolExecutor构造参数及参数意义 Work类 void execute(Runnable command) boolean addWorker(firstTask, core) final void runWorker(Worker w) Runnable getTask() void processWorkerExit(w, complet…
目录 ScheduledThreadPoolExecutor概述 类图结构 ScheduledExecutorService ScheduledFutureTask FutureTask schedule void delayedExecute(task) boolean canRunInCurrentRunState(periodic) void ensurePrestart() ScheduledFutureTask#run() FutureTask#run() FutureTask#set…
[源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 目录 [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 0x00 摘要 0x01 Horovod 简介 0x02 Hovorod 机制概述 2.1 Horovod 机制 0x03 示例代码 3.1 摘要代码 3.2 horovodrun 0x04 运行逻辑 4.1 引入python文件 4.2 初始化 in python 4.2.1 引入SO库 4.2.1.1 SO库 4…
[源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver 0x00 摘要 0x01 引子 0x02 总体架构 2.1 get_local_interfaces 2.2 _driver_fn 2.3 获取路由接口 2.3.1 probe逻辑 2.3.2 等待函数 0x03 基础网络服务 3.1 继承关系 3.2 network.BasicServic…
[源码解析] 深度学习分布式训练框架 horovod (3) --- Horovodrun背后做了什么 目录 [源码解析] 深度学习分布式训练框架 horovod (3) --- Horovodrun背后做了什么 0x00 摘要 0x01 背景知识 1.1 分布式体系 1.2 并行任务通信 1.3 MPI 1.4 Open-MPI 1.5 MPI 使用问题 0x02 入口点 2.1 如何运行 2.2 horovodrun 2.3 run_commandline 2.4 非弹性训练 _run_st…
[源码解析] 深度学习分布式训练框架 horovod (5) --- 融合框架 目录 [源码解析] 深度学习分布式训练框架 horovod (5) --- 融合框架 0x00 摘要 0x01 架构图 0x02 统一层 0x03 Horovod OP 类体系 3.1 基类 HorovodOp 3.2 派生类 AllreduceOp 3.3 适配类 MPIAllreduce 3.4 后台线程如何使用 3.4.1 具体collective 操作 3.4.2 调用不同类型的OP 3.4.3 取一个适配层…
[源码解析] 深度学习分布式训练框架 horovod (6) --- 后台线程架构 目录 [源码解析] 深度学习分布式训练框架 horovod (6) --- 后台线程架构 0x00 摘要 0x01 引子 0x02 设计要点 2.1 问题 2.2 方案 2.3 协调 2.3.1 设计 2.3.2 实现 2.4 Background Thread 2.4.1 设计 2.4.2 实现 0x03 辅助功能 3.1 如何判断是 coordinator 3.2 协调缓存&信息 3.2.1 计算共有 ten…
[源码解析] 深度学习分布式训练框架 horovod (7) --- DistributedOptimizer 目录 [源码解析] 深度学习分布式训练框架 horovod (7) --- DistributedOptimizer 0x00 摘要 0x01 背景概念 1.1 深度学习框架 1.2 Tensorflow Optimizer 0x02 总体架构 2.1 总体思路 3.2 总体调用关系 0x04 TensorFlow 1.x 4.1 _DistributedOptimizer 4.2 c…
[源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 0x00 摘要 0x01 Spark相关知识 1.1 为什么整合 Spark 1.2 Spark 简单架构 1.3 Pyspark 原理 1.3.1 架构修改 1.3.2 Driver端 1.3.3 Executor端 1.3.4 流程 0x02 机器学习 on Spark 2.1 机器学习的特点 2.2 机器学习…
[源码解析] 深度学习分布式训练框架 horovod (9) --- 启动 on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (9) --- 启动 on spark 0x00 摘要 0x01 总体架构图 0x02 第一阶段 :Horovod 启动 2.1 Driver服务 :SparkDriverService 2.2 启动spark task : _make_spark_thread 2.3 等待 spark task 启动结束 2.3.1 _notify_and_…
[源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark 0x00 摘要 0x01 回顾 1.1 总体序列图 1.2 总体逻辑 1.3 问题 0x02 第四阶段 : 启动 Job 2.1 _launch_job 2.2 获取路由信息 2.3 run_controller 0x03 MPI 实验 3.1 问题点 3.2 名词解释 3.2.1 orterun…
[源码解析] 深度学习分布式训练框架 horovod (11) --- on spark --- GLOO 方案 目录 [源码解析] 深度学习分布式训练框架 horovod (11) --- on spark --- GLOO 方案 0x00 摘要 0x01 回顾 1.1 总体序列图 1.2 总体逻辑 0x02 第四阶段 : 启动 Job 2.1 GLOO VS MPI 2.1.1 MPI 麻烦之处 2.1.2 Gloo关键点 2.2 回顾启动过程 2.3 _launch_job 2.3 获取路…