先看用例源码: #include <stdio.h> #include <uv.h> int64_t counter = 0; void wait_for_a_while(uv_idle_t* handle
系统内核在收发事件、消息时使用的消息传递函数。可以理解为多进程之间的一种通讯调用机制。
Druid中的Connection在使用之后,要进行回收,而回收连接的方法就是recucle方法。 回收的主要目的是将连接的状态清空/重置之后,放置到连接池的connections数组的尾部,然后发送连接池lock的notEmpty条件变量通知消息,让等待的消费者线程来获取连接。
一、简介 使用Mybatis有一段时间了,但是一直没有专门去阅读MyBatis框架的源码,Mybatis是一个非常值得我们去阅读的框架,源码里面运用了很多常见的设计模式,如构建者模式、代理模式、模板方法模式等等 下面我们就以搭建一个源码阅读环境开始,一起来看看Mybatis的源码。 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 官网地址:mybatis.org/mybatis-3/z… 如果对Mybatis还不熟悉的小伙伴,建议还是先去官网熟悉Mybatis是如何使用的,熟悉以后我们再来看其源码实现。 下面我们搭建一个简单的Mybatis 源码Debug环境。 通过上面的示例,我们总结一下Mybatis使用的大体流程,如下图所示: 可以看到,主要分为了如上图的几个步骤,这几个步骤也是Mybatis的核心了,所以我们阅读源码也是从这几个部分切入,逐步逐步去了解里面的实现细节
查看InheritableThreadLocal源码 重写了getMap和createMap方法。
redux源码解析 什么是redux Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 源码解析 注意: 如果没有使用过redux,建议先去看看redux文档 api方法 export { createStore, combineReducers, bindActionCreators ) } var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7)
SparkContext是spark的入口,通过它来连接集群、创建RDD、广播变量等等。
ConcurrentHashMap源码阅读1.ConcurrentHashMap1.71.存储结构Java7中ConcurrentHashMap由很多个Segment组合,而每一个Segment是一个类似于 3.put直接过一遍put源码。 4.getget流程比较简单,直接过一遍源码。 总结:总的来说ConcurrentHashMap在Java8中相对于Java7来说变化还是挺大的,3.总结Java7中ConcurrentHashMap使用的分段锁,也就是每一个Segment上同时只有一个线程可以操作 结构也由Java7中的Segment数组+HashEntry数组+链表进化成了Node数组+链表/红黑树,Node是类似于一个HashEntry的结构。
每个线程独有一个 Map,Map里的存储结构为 Entry <ThreadLocal,Object> 数组
开始(环境准备) 新建一个项目目录,并在目录中新建文件Dockerfile FROM centos:7 # 安装依赖工具 RUN yum -y install gcc gcc-c++ gdb autoconf 已挂载进容器 docker-compose exec centos bash php-fpm nginx # 查看 worker 进程号 ps aux | grep fpm gdb --pid=xxx 阅读工具 推荐使用Understand 尝试过CLion和Visual Studio 很多代码都不能进行跳转 需自行下载一个与Dockerfile中PHP版本相同的源码用于阅读 增加扩展(可选) 依赖 下载已经安装的 PHP按本的PHP源码 进入扩展源码目录比如curl cd ~/php71/ext/curl 执行phpize(编译PHP扩展的工具,主要是根据系统信息生成对应的configure文件) /var/ 使用方便缺容易导致出现问题 PHP7 数组的底层实现 PHP 数组底层实现 zval.value.arr.arData ─┐
koa源码阅读[0] Node.js也是写了两三年的时间了,刚开始学习Node的时候,hello world就是创建一个HttpServer,后来在工作中也是经历过Express、Koa1.x、Koa2 用的比较多的还是Koa版本,也是对它的洋葱模型比较感兴趣,所以最近抽出时间来阅读其源码,正好近期可能会对一个Express项目进行重构,将其重构为koa2.x版本的,所以,阅读其源码对于重构也是一种有效的帮助 image.png 小记 最近抽时间将Koa相关的源码翻看一波,看得挺激动的,想要将它们记录下来。 应该会拆分为几段来,不一篇全写了,上次写了个装饰器的,太长,看得自己都困了。 koa与koa-compose 热门中间件 koa-router与koa-views 杂七杂八的轮子 koa-bodyparser/multer/better-body/static 示例代码仓库地址 源码阅读仓库地址
ThreadLocal源码比较简单,整体了解起来比较容易。
ioredis源码阅读[1] 上次针对 redis 的源码阅读涉及普通的 client,这次针对 cluster 模式下的 client 源码进行分析。 具体的源码路径就是在 lib/cluster 目录下了。 127.0.0.1", }, { port: 6381, host: "127.0.0.1", }, ]) cluster.get('someKey').then() 从源码上来看
reselect源码阅读 之前就听闻了reselect是一个用于react性能优化的库,并且源码只有100多行。 可谓短小精悍,今天来阅读一波膜拜大佬们的思想 import { createSelector } from 'reselect' const shopItemsSelector = state = 下面开始阅读探读部分 先说几个简单的工具函数吧 首先是默认的比较函数,代表比较方式,可以根据业务需求换的。默认是进行全等比较 /** * 默认的比较函数,只进行一层全等比较。
toc Koa源码阅读 Koa使用 Koa整体调用流程 Koa 中间件“洋葱模型” Koa源码阅读 Koa使用 Koa整体调用流程 Koa 中间件“洋葱模型” Koa源码阅读 Koa 在众多NodeJs 框架中,以短小精悍而著称,核心代码只有大约570行,非常适合源码阅读。 本文就核心阅读中间件的源码。 Koa使用 中间件可以理解为插件,对于Koa来说,就是很简单的use()API。 Koa源码阅读 Koa 在众多NodeJs框架中,以短小精悍而著称,核心代码只有大约570行,非常适合源码阅读。 实际上核心来说,Koa主要是两块 中间件系统 对请求结构封装为更为易用的ctx对象。 本文就核心阅读中间件的源码。 Koa使用 中间件可以理解为插件,对于Koa来说,就是很简单的use()API。
自己对着源码敲一遍练习,写上注释。发现NIO编程难度好高啊。。 = null && args.length > 0){ 7 try{ 8 port = Integer.valueOf(args[0]); java.net.InetSocketAddress; 5 import java.nio.ByteBuffer; 6 import java.nio.channels.SelectionKey; 7 TimeServer: 1 package nio; 2 3 import java.io.IOException; 4 5 public class TimeServer { 6 7 java.net.InetSocketAddress; 5 import java.nio.ByteBuffer; 6 import java.nio.channels.SelectionKey; 7
把缩容一次后会聚拢到该bucket的bucket也遍历了,也就是idx与(idx + size/2) % size 比如size是8,缩容后就是4,所以对size为8的遍历就是 0->4 1->5 2->6 3->7 基于idx与idx + size/2这个公式得到的bucket 源码里把这用一个数学公式体现(反序+1后再反序) //每次从高位进1 000 0 -》 100 4 001 1 -》 101 5 010 2 -》 110 6 011 3- 》 111 7
经典的源码像诗,值得细细品味 1. 明确目的 阅读书籍和源码最好带着自己的问题和目的,这样可以避免“看了就忘”的尴尬状态。 读研期间,为了掌握嵌入式开发,读了很多Linux的内核源码,摸索清楚了一个Linux系统从系统加电到控制台出现的流程。 最近开始阅读RocketMQ的源码,目的有两个: 学习MQ的通用知识(可靠发送、可靠消费、顺序消息、消息优先级等等)、RocketMQ自己的实现,以及不同MQ之间的比较。 基本流程 源码阅读是有一定的套路的。 以RocketMQ为例,分享下我的方法: (1)我会先去学会基本的使用; (2)阅读官网的文档,了解该中间件的整体架构、核心概念; (3)梳理基本功能的实现,例如系统启动、发送消息、消费消息的过程; (
= list.size(); Assert.assertEquals("a", one); Assert.assertEquals(4, size); } 下面,将从构造函数开始读取源码
image&quality=80&size=b9999_10000&sec=1494417111222&di=0679f94eacd58059affec7cc9a33c731&imgtype=0&src