草庐IT

动动手

全部标签

自己动手基于 Redis 实现一个 .NET 的分布式锁类库

分布式锁的核心其实就是采用一个集中式的服务,然后多个应用节点进行抢占式锁定来进行实现,今天介绍如何采用Redis作为基础服务,实现一个分布式锁的类库,本方案不考虑Redis集群多节点问题,如果引入集群多节点问题,会导致解决成本大幅上升,因为Redis单节点就可以很容易的处理10万并发量了,这对于日常开发中99%的项目足够使用了。目标如下:支持using语法,出using范围之后自动释放锁支持尝试行为,如果锁获取不到则直接跳过不等待支持等待行为,如果锁获取不到则持续等待直至超过设置的等待时间支持信号量控制,实现一个锁可以同时获取到几次,方便对一些方法进行并发控制代码整体结构图创建Distribu

自己动手基于 Redis 实现一个 .NET 的分布式锁类库

分布式锁的核心其实就是采用一个集中式的服务,然后多个应用节点进行抢占式锁定来进行实现,今天介绍如何采用Redis作为基础服务,实现一个分布式锁的类库,本方案不考虑Redis集群多节点问题,如果引入集群多节点问题,会导致解决成本大幅上升,因为Redis单节点就可以很容易的处理10万并发量了,这对于日常开发中99%的项目足够使用了。目标如下:支持using语法,出using范围之后自动释放锁支持尝试行为,如果锁获取不到则直接跳过不等待支持等待行为,如果锁获取不到则持续等待直至超过设置的等待时间支持信号量控制,实现一个锁可以同时获取到几次,方便对一些方法进行并发控制代码整体结构图创建Distribu

动手实验查看MySQL索引的B+树的高度

一:文中几个概念h:统称索引的高度;h1:主键索引的高度;h2:辅助索引的高度;k:非叶子节点扇区个数。二:索引结构叶子节点其实是双向链表,而叶子节点内的行数据是单向链表,该图未体现。磁盘块其实是页,用操作系统中的术语来表达而已。InnoDB中使用的是B+树聚集索引,主键索引叶子节点有整行的数据,辅助索引有主键值(用于回表查询)和索引值。2.1页的概念Mysql的InnoDB是以页为存储单位的,每个B+Tree的节点都是一个页的大小,默认一页的大小是16K(与操作系统数据读取相关)。数据页(即叶子节点)2.2索引高度h与页面I/O数的关系每次查询都要访问到叶子结点,其访问的页面数正好就是索引的

动手实验查看MySQL索引的B+树的高度

一:文中几个概念h:统称索引的高度;h1:主键索引的高度;h2:辅助索引的高度;k:非叶子节点扇区个数。二:索引结构叶子节点其实是双向链表,而叶子节点内的行数据是单向链表,该图未体现。磁盘块其实是页,用操作系统中的术语来表达而已。InnoDB中使用的是B+树聚集索引,主键索引叶子节点有整行的数据,辅助索引有主键值(用于回表查询)和索引值。2.1页的概念Mysql的InnoDB是以页为存储单位的,每个B+Tree的节点都是一个页的大小,默认一页的大小是16K(与操作系统数据读取相关)。数据页(即叶子节点)2.2索引高度h与页面I/O数的关系每次查询都要访问到叶子结点,其访问的页面数正好就是索引的

动手实现深度学习(12): 卷积层的实现与优化(img2col)

9.1卷积层的运算传送门: https://www.cnblogs.com/greentomlee/p/12314064.htmlgithub:Leezhen2014: https://github.com/Leezhen2014/python_deep_learning卷积的forward卷积的计算过程网上的资料已经做够好了,没必要自己再写一遍。只把资料搬运到这里:http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmeti

动手实现深度学习(12): 卷积层的实现与优化(img2col)

9.1卷积层的运算传送门: https://www.cnblogs.com/greentomlee/p/12314064.htmlgithub:Leezhen2014: https://github.com/Leezhen2014/python_deep_learning卷积的forward卷积的计算过程网上的资料已经做够好了,没必要自己再写一遍。只把资料搬运到这里:http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmeti

动手实现深度学习(4): 神经网络的backward实现

传送门: https://www.cnblogs.com/greentomlee/p/12314064.htmlgithub: https://github.com/Leezhen2014/python_deep_learning 在第二篇中介绍了用数值微分的形式计算神经网络的梯度,数值微分的形式比较简单也容易实现,但是计算上比较耗时。本章会介绍一种能够较为高效的计算出梯度的方法:基于图的误差反向传播。根据deeplearningfromscratch这本书的介绍,在误差反向传播方法的实现上有两种方法:一种是基于数学式的(第二篇就是利用的这种方法),一种是基于计算图的。这两种方法的本质是一样的

动手实现深度学习(4): 神经网络的backward实现

传送门: https://www.cnblogs.com/greentomlee/p/12314064.htmlgithub: https://github.com/Leezhen2014/python_deep_learning 在第二篇中介绍了用数值微分的形式计算神经网络的梯度,数值微分的形式比较简单也容易实现,但是计算上比较耗时。本章会介绍一种能够较为高效的计算出梯度的方法:基于图的误差反向传播。根据deeplearningfromscratch这本书的介绍,在误差反向传播方法的实现上有两种方法:一种是基于数学式的(第二篇就是利用的这种方法),一种是基于计算图的。这两种方法的本质是一样的

自己动手从零写桌面操作系统GrapeOS系列教程——24.加载并运行loader

学习操作系统原理最好的方法是自己写一个简单的操作系统。之前我们在电脑的启动过程中介绍过boot程序的主要任务就是加载并运行loader程序,本讲我们就来实现。本讲代码文件共2个:boot.asmloader.asm一、代码及讲解本讲所用到的知识点都是之前已经用过的,只是在本讲中综合应用了一下。关于如何读取文件在上一讲中已经介绍过了,我们只要在上讲代码中把要读取的文件名改成loader的文件名"LOADER  BIN"即可读取loader程序文件。本讲的boot.asm就是在上讲的基础上稍微改了下,加了3处提示语句。程序一开始先清屏并在屏幕上输出字符串“GrapeOSbootstart.”。然后

自己动手从零写桌面操作系统GrapeOS系列教程——24.加载并运行loader

学习操作系统原理最好的方法是自己写一个简单的操作系统。之前我们在电脑的启动过程中介绍过boot程序的主要任务就是加载并运行loader程序,本讲我们就来实现。本讲代码文件共2个:boot.asmloader.asm一、代码及讲解本讲所用到的知识点都是之前已经用过的,只是在本讲中综合应用了一下。关于如何读取文件在上一讲中已经介绍过了,我们只要在上讲代码中把要读取的文件名改成loader的文件名"LOADER  BIN"即可读取loader程序文件。本讲的boot.asm就是在上讲的基础上稍微改了下,加了3处提示语句。程序一开始先清屏并在屏幕上输出字符串“GrapeOSbootstart.”。然后