先看下用例源码: #include <stdio.h> #include <uv.h> uv_barrier_t blocker; uv_rwlock_t numlock; int shared_num
系统内核在收发事件、消息时使用的消息传递函数。可以理解为多进程之间的一种通讯调用机制。
下面详细介绍一些目录(可能分功能介绍) 一、api目录 |– README |– go1.txt `– next.txt 通过阅读README知道,go1.txt可以通过go tool api命令生成。 uint32 bx; /* ... */ 8 uint32 dx; /* ... */ 9 uint32 cx; /* ... */ 10 uint32 ax; /* ... */ 11 这一序列工具具体的源码,感兴趣的可以阅读。 11)yacc Go版本的yacc。 http://plan9.bell-labs.com/magic/man2html/1/yacc。这是一个经典的生成语法分析器的工具。 可见,在源码安装Go的过程中,打印出的大部分信息就是这个文件的作用。 五、src/pkg Go标准库源码
一、简介 使用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
SparkContext是spark的入口,通过它来连接集群、创建RDD、广播变量等等。
ConcurrentHashMap源码阅读1.ConcurrentHashMap1.71.存储结构Java7中ConcurrentHashMap由很多个Segment组合,而每一个Segment是一个类似于 3.put接着上面的初始化参数继续查看put方法源码。展开代码语言:JavaAI代码解释/***Mapsthespecifiedkeytothespecifiedvalueinthistable. 创建新的数组HashEntry<K,V>[]newTable=(HashEntry<K,V>[])newHashEntry[newCapacity];//新的掩码,默认2扩容后是4,-1是3,二进制就是11 3.put直接过一遍put源码。 4.getget流程比较简单,直接过一遍源码。
每个线程独有一个 Map,Map里的存储结构为 Entry <ThreadLocal,Object> 数组
已挂载进容器 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/ 个字节 成员 b 占用 1 个字节 成员 c 占用 2 个字节, 对齐是 2n (b 成员后的填空 1 个字节) 成员 d 占用 1 个字节, 偏移 8 最后填充的字节为默认字节位填满, 就是填充空到 11 总占用字节为: 0 ~ 11 = 12 个字节 ## c 是找到 2n 的位置 aaaa b0cc d000 大小端模式 大端小端是不同的字节顺序存储方式,统称为字节序 假设一个数值为0x1A2B3C4D
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编程难度好高啊。。 Integer.valueOf(args[0]); 9 }catch(NumberFormatException e){ 10 //采用默认值 11 8 import java.nio.channels.SocketChannel; 9 import java.util.Iterator; 10 import java.util.Set; 11 = null && args.length >0){ 10 try{ 11 port = Integer.valueOf(args[0]); 12 java.nio.channels.ServerSocketChannel; 9 import java.nio.channels.SocketChannel; 10 import java.util.Iterator; 11
size/2) % size 比如size是8,缩容后就是4,所以对size为8的遍历就是 0->4 1->5 2->6 3->7 基于idx与idx + size/2这个公式得到的bucket 源码里把这用一个数学公式体现
经典的源码像诗,值得细细品味 1. 明确目的 阅读书籍和源码最好带着自己的问题和目的,这样可以避免“看了就忘”的尴尬状态。 读研期间,为了掌握嵌入式开发,读了很多Linux的内核源码,摸索清楚了一个Linux系统从系统加电到控制台出现的流程。 最近开始阅读RocketMQ的源码,目的有两个: 学习MQ的通用知识(可靠发送、可靠消费、顺序消息、消息优先级等等)、RocketMQ自己的实现,以及不同MQ之间的比较。 基本流程 源码阅读是有一定的套路的。 以RocketMQ为例,分享下我的方法: (1)我会先去学会基本的使用; (2)阅读官网的文档,了解该中间件的整体架构、核心概念; (3)梳理基本功能的实现,例如系统启动、发送消息、消费消息的过程; (
= list.size(); Assert.assertEquals("a", one); Assert.assertEquals(4, size); } 下面,将从构造函数开始读取源码
参考资料:http://www.apkbus.com/blog-705730-60158.html 用法: