openssh源码分析笔记】的更多相关文章

1.客户端保活: options.client_alive_interval options.client_alive_count_max 在wait_until_can_do_something()函数中实现 2.主进程监听客户端连接请求 main() server_accept_loop() 3.接受客户端连接请求后协商: 1)版本号协商: main sshd_exchange_identification 2)算法密钥协商: main do_ssh2_kex 3)用户名密码验证: main…
在zeromq源码分析笔记之架构说到了zmq的整体架构,可以看到线程间通信包括两类,一类是用于收发命令,告知对象该调用什么方法去做什么事情,命令的结构由command_t结构体确定:另一类是socket_base_t实例与session的消息通信,消息的结构由msg_t确定.命令的发送与存储是通过mailbox_t实现的,消息的发送和存储是通过pipe_t实现的,这两个结构都会详细说到,今天先说一下线程间的收发命令. zeromq的线程可分为两类,一类是io线程,像reaper_t.io_thr…
ReentrantReadWriteLock包含两把锁,一是读锁ReadLock, 此乃共享锁, 一是写锁WriteLock, 此乃排它锁. 这两把锁都是基于AQS来实现的. 下面通过源码来看看ReentrantReadWriteLock是如何做到读读共享,读写互斥的. 1. 测试代码  import java.util.concurrent.CyclicBarrier; import java.util.concurrent.locks.ReentrantReadWriteLock; publ…
ArrayList源码分析笔记 先贴出ArrayList一些属性 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { /** * 系列化ID. */ private static final long serialVersionUID = 8683452581122892189L; /**…
rocketmq源码解析笔记 大家好,先安利一下自己,本人男,35岁,已婚.目前就职于小资生活(北京),职位是开发总监. 姓名DaneBrown 好了.我保证本文绝不会太监!转载时请附上以上安利信息.THXALOT. OK,开始. 因为我没有在rocketmq团队中工作过,只好以一个使用者的角度去思考rocketmq的源码.我使用的是3.2.6版本,其他版本可能略有不同. 我先讲rocketmq-tools rocketmq-tools rocketmq-tools是个独立的jar包,所以应该是…
1.线程池的作用 一方面当执行大量异步任务时候线程池能够提供较好的性能,在不使用线程池的时候,每当需要执行异步任务时候是直接 new 一线程进行运行,而线程的创建和销毁是需要开销的.使用线程池时候,线程池里面的线程是可复用的,不会每次执行异步任务时候都重新创建和销毁线程. 另一方面线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态新增线程等,每个 ThreadPoolExecutor 也保留了一些基本的统计数据,比如当前线程池完成的任务数目等. 2.ThreadPoolExecu…
#Handler机制# Handler机制实际就是实现一个 异步消息循环处理器 Handler的真正意义: 异步处理 Handler机制的整体表述: 消息处理线程: 在Handler机制中,异步消息处理线程启动后,该线程在Looper.loop()的影响下会进入无线循环. 获取消息: 在loop()方法的循环中,每循环一次,就从MessageQueue消息队列中取出一个消息. 没有消息的时: 如果消息队列没有消息.那么异步消息处理线程就会进入阻塞等待. 处理消息: 该线程中会回调Handler的…
经过昨晚的培训.对AQS源码的理解有所加强,现在写个小笔记记录一下 同样,还是先写个测试代码,debug走一遍流程, 然后再总结一番即可. 测试代码 import java.util.concurrent.CyclicBarrier; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class AqsTest { public static void m…
CLIENT 之前讲过tools里面有大量调用client的东西.为了从源码层面了解rocket,决定啃下client这块骨头. pom 先看pom,看看CLIENT依赖谁.看完后原来是依赖common的.common又依赖remoting的 翻开remoting看了看,都是一些接口定义.明白了,remoting应该是通信协议,公共接口.看来如果讲框架的时候,应该从remoting开始讲. 而common,看名字就知道是个公共包,里面提供了各种公用的东西.先不讲了,用到再看吧. 好的,开始分析源…
1.zmq概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字.引用云风的话来说:ZeroMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议.它有自己的模式,不同于更底层的点对点通讯模式.它有比 tcp 协议更高一级的协议.(当然 ZeroMQ 不一定基于 TCP 协议,它也可以用于进程间和进程内通讯)它改变了通讯都基于一对一的连接这个假设.ZeroMQ 把通讯的需求看成四类.其中一类是一对…
一.相关数据结构及其位置(大致浏览即可,介绍流程时再来仔细看) 1.1 进程描述符struct task_struct所在目录:include\linux\sched.h 关注task_struct中如下字段: struct sigpending pending:存放着实时信号,位于include\linux\signal.h,该结构有如下字段 struct sigpending { struct list_head list; \\指针 sigset_t signal; \\位图 }; sig…
在上一篇中说到了mailbox_t的底层实际上使用了管道ypipe_t来存储命令.而ypipe_t实质上是一个无锁队列,其底层使用了yqueue_t队列,ypipe_t是对yueue_t的再包装,所以我们先来看看yqueue_t是怎么实现的. 1.yqueue_t yqueue_t是一个高效的队列,高效体现在她的内存配置上,尽量少的申请内存,尽量重用将要释放的内存.其实,容器的设计都会涉及这点--高效的内存配置器,像sgi stl容器的内存配置器,使用了内存池,预先分配一块较大内存,用不同大小的…
在 APIview 类中的属性有一条是: authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES 定义了一个类属性为authentication_classes,值从api_settings中的一个属性,查看api_settings发现也是个类对象, api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS) 是有 APISettings 实例化出来的一个对…
1,实例化DefaultListableBeanFactory DefaultListableBeanFactory是AnnotationConfigApplicationContext的组件,DefaultListableBeanFactory在AnnotationConfigApplicationContext实例化时被实例化.在SpringApplication.createApplicationContext()判断实例化那种类型ApplicationContext.DefaultLis…
(function( window, undefined ) { // 构造jQuery对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); } // 工具函数 Utilities // 异步队列 Deferred // 浏览器测试 Support // 数据缓存 Data // 队列 queue // 属性操作 Attribute /…
jquery-2.0.3.js版本源码分析 (function(){  (21,94) 定义了一些变量和函数 jQuery = function(){};  (96,283) 给JQ对象,添加一些方法和属性  (285,347) extend : JQ的继承方法  (349,817) jQuery.extend():扩展一些工具方法  (877,2856) Sizzle :复杂选择器的实现   在jquery的官网可以直接下载它,它可以是独立的  (2880,3042) Callbacks :…
概述 继承抽象类AbStractList,实现接口List.RandomAccess.Cloneable以及序列化接口默认容量大小为10,扩容增量为0,扩容为原容量的2倍如设置的增量大于0,则扩容为(原容量+增量)支持随机访问,添加删除元素较慢线程安全的动态数组,方法加上了synchronized同步锁,故性能较低源码 字段信息 public class Vector<E> extends AbstractList<E> implements List<E>, Rand…
核心类 InfrastructureAdvisorAutoProxyCreator 本质是一个后置处理器,和AOP的后置处理器类似,但比AOP的使用级别低.当开启AOP代理模式后,优先使用AOP的后置处理器. AopConfigUtils: /** * The bean name of the internally managed auto-proxy creator. */ //和AOP一样都向容器注入以此为name的后置处理器,进行代理类的创建 public static final Str…
List Class Diagram: 笔记一: 1.Iterable 接口只定义一个iterator()方法. Iterator 接口有hasNext, next, remove方法. ListIterator接口继承Iterator接口,增加了hasPrevicous,previous,nextIndex, previousIndex,add,set方法. 2.AbstractCollection中: (1)public <T> T[] toArray(T[] a) 方法: 如果数组a空间…
Table of Contents 1 术语 1.1 ABC 1.2 SACK 1.3 D-SACK 1.4 FACK 1.5 F-RTO 1.6 nagle算法 1.7 cork算法 1.8 template 2 tcp_v4_connect() 3 sys_accept() 3.1 tcp_accept() 4 三次握手 4.1 客户端发送SYN段 4.2 服务端接收到SYN段后,发送SYN/ACK处理 4.3 客户端回复确认ACK段 4.3.1 tcp_rcv_synsent_state_…
zeromq这个库主要用于进程通信,包括本地进程.网络通信,涉及到一些基础知识,主要包括管道通信,socket编程的内容,反应器模式(使用IO多路复用实现),无锁队列这几块比较重要的部分,下面的几个链接是这几块内容的学习笔记,有了这些知识,能比较好的理解这个开源库 1.socket原理详解 2.I/O多路复用之select 3.I/O多路复用之poll 4.I/O多路复用之epoll zeromq的版本是4.0.5,使用的工具是Source Inside3…
一.中断初始化 中断的一些硬件机制不做过多的描述,只介绍一些和linux实现比较贴近的机制,便于理解代码. 1.1 关于intel和linux几种门的简介 intel提供了4种门:系统门,中断门,陷阱门,调用门. 调用门:不同特权级之间实现受控的程序控制转移,它是放在GDT或LDT之中.使用调用门需要为CALL或JMP指令的操作数提供一个远指针,该指针中的段选择符用于指定调用门,指向的是GDT或LDT中的一个段,在低特权级代码切换到高特权级代码是会发生代码段的转移.(linux没有使用这种门,感…
一.进程重要字段描述 在目录include\linux\sched.h下定义了进程描述符task_struct,关注如下字段: 进程状态 volatile long state:表示进程状态,在该文件头部有几种状态的取值. long exit_state:表示进程退出状态,下面的定义中前缀为EXIT的表示该字段取值,表示进程退出状态 /* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: g…
1. Servlet 结构图 2. servlet接口 public interface Servlet { //init方法在容器启动时被容器调用(当load-on-startup设置为负数或者不设置时会在Servlet第一次用到时才被调用),只调用一次 void init(ServletConfig var1) throws ServletException; // ServletConfig getServletConfig(); //service方法用于具体处理一个请求 void se…
1.特点: ArrayList 是一个动态数组,它是线程不安全的,允许元素为null 可重复,插入有序 读写快,增删慢 扩容:默认容量 10,默认扩容1.5倍 建议指定容量大小,减少扩容带来的性能消耗 2.构造方法 只分析复杂的 public ArrayList(Collection<? extends E> c) c.toArray() 在Collection接口中定义的接口方法,ArrayList中调用的是Arrays.copyOf(elementData, size)方法(注:扩容也是使…
1.ScheduledThreadPoolExecutor 整体结构剖析. 1.1类图介绍 根据上面类图图可以看到Executor其实是一个工具类,里面提供了好多静态方法,根据用户选择返回不同的线程池实例.可以看到ScheduledThreadPoolExecutor 继承了 ThreadPoolExecutor 并实现 ScheduledExecutorService接口.线程池队列是 DelayedWorkQueue,和 DelayedQueue 类似是一个延迟队列. ScheduledFu…
核心类&方法 BeanDefinition Bean的定义信息,封装bean的基本信息,从中可以获取类名.是否是单例.是否被注入到其他bean中.是否懒加载.bean依赖的bean的名称等. Aware 继承Aware的bean可以感知到他在容器中的一些属性,如获取bean在容器中的ID,甚至获取到容器等. BeanPostProcessor Bean的后置处理器,可在bean的创建.初始化等阶段的前后对bean进行增强处理等. BeanFactory 以Factory结尾,表示它是一个工厂类(…
1.SpringMvc 中核心Servlet的继承结构图 2.HttpServletBean public abstract class HttpServletBean extends HttpServlet implements EnvironmentCapable, EnvironmentAware { public final void init() throws ServletException { if (logger.isDebugEnabled()) { logger.debug(…
1.特点 LinkedList的底层实现是由一个双向链表实现的,可以从两端作为头节点遍历链表. 允许元素为null 线程不安全 增删相对ArrayList快,改查相对ArrayList慢(curd都会根据index找到Node,折半查找来提高效率) 底层链表实现,没有扩容一说 2.链表节点 静态内部类 private static class Node<E> { E item;//元素值 Node<E> next;//后置节点 Node<E> prev;//前置节点 N…