源码

Linux Kernel2.6.9内核源码分析--poll

旧城冷巷雨未停 提交于 2020-01-28 15:06:22
Linux Kernel2.6.9内核源码分析–poll long sys_poll(struct pollfd __user * ufds, unsigned int nfds, long timeout) poll对应的系统调用为sys_poll,以下是参数说明: struct pollfd __user * ufds :为struct pollfd的数组,里面有文件描述符,event 和revent,其中event为要监听的event类型,revent为监听的结果 unsigned int nfds:为struct pollfd的数组中的元素个数 long timeout:超时时间 asmlinkage long sys_poll ( struct pollfd __user * ufds , unsigned int nfds , long timeout ) { . . . . . . . . . . . . . poll_initwait ( & table ) ; . . . . . . . . . . while ( i != 0 ) { struct poll_list * pp ; pp = kmalloc ( sizeof ( struct poll_list ) + sizeof ( struct pollfd ) * ( i > POLLFD_PER

【深入学习Mybatis】Chapter1源码调试环境搭建

微笑、不失礼 提交于 2020-01-28 07:55:26
Mybatis简介 Mybatis 是一个一流的持久化框架,支持自定义SQL,存储过程和高级映射。 Mybatis几乎消除了所有的JDBC代码以及参数的手动设置和结果检索。Mybatis可以使用简单的XML或注释进行配置,并将原函数,映射接口和Java Pojo 映射到数据库记录。 MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records. 环境信息 macOS Catalina Git JDK8 Maven3 Intellij 克隆源码到本地 git clone https://github

golang-lru源码解析(2)2q缓存

自作多情 提交于 2020-01-28 02:24:29
文章目录 2q TwoQueueCache结构 构造方法 Get方法 Add方法 其他方法 2q TwoQueueCache结构 TwoQueueCache 包含了三个基础的LRU缓存 simplelru的代码可戳 《golang-lru源码解析(1)项目结构、simplelru》 从名称上来看,分别用来存储: 最近被使用的元素 最频繁被使用的元素 从最近缓存中被淘汰出来的元素 相比基本的LRU缓存,增加了一个recent缓存,recent用来保存新元素,而一个元素一旦被触发(新增或查询)两次及以上,那么机会被移动到frequent队列。将频繁使用的数据与新数据区分开来,当来到比较多的新数据的时候,不会挤占频繁但最近没有出现的数据,因为这些旧数据被命中的概率还是很大的。 type TwoQueueCache struct { size int // 整体缓存的最大元素数量 recentSize int // recent缓存的最大元素数量 recent simplelru . LRUCache frequent simplelru . LRUCache recentEvict simplelru . LRUCache // 锁,保证线程安全 lock sync . RWMutex } const ( // 默认的recent缓存占总容量的比例 // 剩下的0

mochiweb 源码阅读(二)

断了今生、忘了曾经 提交于 2020-01-28 00:02:43
  大家好,几天没跟新了,在上一篇,我们简单介绍了mochiweb这个项目,以及下载,编译,创建mochiweb的源码以及示例。今天继续跟大家来分析mochiweb这个项目,跟之前分析cowboy的方法一样,我们找到切入口点,来一一分析每个函数的功能,作用,下面看下上一篇创建的示例都有哪些文件,如下图:      这里除了keepalive.erl 是我从官方example考过来以外,其他为上一篇创建的例子的源码。   我不一一介绍这几个文件了,参考我一直给大家推荐的 Erlang OTP 设计原理 。好好看几遍,你就对Erlang应用程序有一定的了解了。   我们从运行程序的 mochiweb_example:start/0 开始看吧,代码如下: %% @spec start() -> ok %% @doc Start the mochiweb_example server. start() -> mochiweb_example_deps:ensure(), ensure_started(crypto), application:start(mochiweb_example).   这个函数三行代码,第一行先跳过,一会我们重点看下。   第二行启动crypto, mochiweb_example:ensure_started/1 ,代码如下: ensure_started

mybatis源码阅读(五) ---执行器Executor

纵饮孤独 提交于 2020-01-27 14:27:20
转载自 mybatis源码阅读(五) ---执行器Executor 1. Executor接口设计与类结构图 public interface Executor { ResultHandler NO_RESULT_HANDLER = null; // 执行update,delete,insert三种类型的sql语句 int update(MappedStatement ms, Object parameter) throws SQLException; // 执行select类型的SQL语句,返回值分为结果对象列表和游标对象 <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey cacheKey, BoundSql boundSql) throws SQLException; <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException; <E> Cursor<E> queryCursor(MappedStatement

mybatis源码阅读(六) ---StatementHandler了解一下

≡放荡痞女 提交于 2020-01-27 14:21:58
转载自 mybatis源码阅读(六) ---StatementHandler了解一下 StatementHandler类结构图与接口设计 BaseStatementHandler:一个抽象类,只是实现了一些不涉及具体操作的方法 RoutingStatementHandler:类似路由器,根据配置文件来路由选择具体实现类SimpleStatementHandler、CallableStatementHandler和PreparedStatementHandler SimpleStatementHandler:就是直接使用普通的Statement对象,这样每次执行SQL语句都需要数据库对SQL进行预编译 PrepareStatementHandler:使用PrepareStatement执行,虽然初次创建PrepareStatement时开销比较大,但在多次处理SQL时只需要初始化一次,可以有效提高性能 CallableStatementHandler:使用CallableStatement执行,CallableStatement是用来执行存储过程的。 在每个mapper节点可以设置statementType决定是否使用谁 ,如下 <!-- statementType (可选配置,默认配置为PREPARED) STATEMENT,PREPARED 或 CALLABLE 的一个。 这会让

mybatis源码阅读(七) ---ResultSetHandler了解一下

故事扮演 提交于 2020-01-27 14:14:13
转载自 mybatis源码阅读(七) ---ResultSetHandler了解一下 1、MetaObject MetaObject用于反射创建对象、反射从对象中获取属性值、反射给对象设置属性值,参数设置和结果封装,用的都是这个MetaObject提供的功能。 public static MetaObject forObject(Object object, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) { if (object == null) { return SystemMetaObject.NULL_META_OBJECT; } else { return new MetaObject(object, objectFactory, objectWrapperFactory, reflectorFactory); } } public Object getValue(String name) { PropertyTokenizer prop = new PropertyTokenizer(name); if (prop.hasNext()) { MetaObject metaValue =

WebGL渲染2D图形

拥有回忆 提交于 2020-01-27 13:59:48
WebGL是通过OpenGL ES在HTML的<canvas></canvas>上渲染图形的。 ... <canvas id="main-canvas"></canvas> ... let gl = document.getElementById("main-canvas").getContext("webgl"); if (!gl) { alert("无法使用WebGL!"); } else { console.log(gl); } 这样,就获取到了在canvas上渲染webgl的上下文。 接下来,在canvas上一切的渲染操作,最终都是要依靠这个gl变量来控制的。 不过在此之前,需要作一下前期准备。 着色器准备 首先要准备一下着色器的源码,着色器(shader)是由GLSL(OpenGL Shadering Language,一种类C++语言)编写的计算机程序。着色器是成对出现的,分别是顶点着色器: <script type="notjs" id="vertex-shader-2d"> attribute vec4 a_position; void main() { gl_Position = a_position; } </script> 和片段着色器: <script type="notjs" id="fragment-shader-2d"> precision

Hadoop RPC源码分析

大城市里の小女人 提交于 2020-01-27 11:25:43
Hadoop RPC源码分析 上一篇文章 http://www.cnblogs.com/dycg/p/rpc.html 讲了Hadoop RPC的使用方法,这一次我们从demo中一层层进行分析。 RPC说白了,就3个核心,交互协议、服务端、客户端。 在Hadoop RPC(hadoop-common-2.4.jar)中也是这样 交互协议 org.apache.hadoop.ipc.VersionedProtocol ,所有协议的父类 其实就2个方法,版本与签名。不同版本与签名的协议,就算同一个类名也无法通信。 服务端: RPC.Server 处理客户端的连接请求,并处理相关业务,最后返回结果 客户端: Client,封装请求数据,并接收Response 好,正式开始分析源码吧。 协议部分,我就不说了,就是实现VersionedProtocol接口并添加一些业务方法即可。 我们从客户端程序入口点开始分析,先看看客户端是如何取得协议对象的。 想要与服务端通信就先要得到协议对象,RPC.getProxy就是得到协议对象的方法,沿着代码进入最底层,你会发现,它默认先得到一个RpcEngine(默认实现是WritableRpcEngine),它是什么呢?简单点说就是,它相当于我们启动服务器,获取协议的类。有了WritableRpcEngine后,调用它的getProxy方法

Mybatis源码学习(25)-StatementHandler解析

谁都会走 提交于 2020-01-27 09:16:21
一、简介   StatementHandler是Mybatis最核心的接口之一, 他完成了Mybatis和数据库交互的相关工作(Mybatis与JDBC之间关于Statement的交互工作)。StatementHandler主要作用: 创建Statement对象 为SQL 语句绑定实参 执行select、insert 、update 、delete 等多种类型的SQL语句 批量执行SQL语句 结果集映射成结果对象 StatementHandler接口定义的方法如下: public interface StatementHandler { /** * 从连接中获取一个Statement * @param connection * @param transactionTimeout * @return * @throws SQLException */ Statement prepare ( Connection connection , Integer transactionTimeout ) throws SQLException ; /** * 绑定statement执行时所需的实参 * @param statement * @throws SQLException */ void parameterize ( Statement statement ) throws