随笔分类 - [07]探索c#系列
摘要:阅读目录:概述算法介绍清理线程获取、插入、删除总结概述最近在看storm,发现其中的TimeCacheMap算法设计颇为高效,就简单分享介绍下。 思考一下如果需要一个带过期淘汰的缓存容器,我们通常会使用定时器或线程去扫描容器,以便判断是否过期从而删除。但这样性能并不友好,在数据量较大时O(n)检查是...
阅读全文
摘要:把静态成员导入,但扩展方法比较特殊、排除在外。这时static是c# 6.0的新功能。
等同于把扩展方法的命名空间导入,所以在集合上可以打点可以调扩展方法。这是之前就有的功能,而不是把扩展方法转成成单纯的静态方法导入使用。
阅读全文
摘要:举个例子,楼主逛完街要回张江玉兰香苑,如果从人民广场做公交车回去,要经历非常多站:
阅读全文
摘要:Async,主线程A逻辑->异步任务线程B逻辑->主线程C逻辑。
注意:这3个步骤是有可能会使用同一个线程的,也可能会使用2个,甚至3个线程。
1. net4.5的async,抛去语法糖就是Net4.0的Task+状态机。
2. net4.0的Task, 退化到3.5即是(Thread、ThreadPool)+实现的等待、取消等API操作。
阅读全文
摘要:提高缓存命中率,使用计数改进Bloom filter。
阅读全文
摘要:阅读目录背景虚拟桶(virtual buckets)实现总结背景关于数据分片讨论最多的是一致性hash,然而它并不是分布式设计中的银弹百试百灵。 在数据稳定性要求比较高的场景下它的缺点是不能容忍的。比如在Redis分布式缓存设计中,使用一致性Hash进行key分片存储,通过虚拟节点最大化降低添加或删...
阅读全文
摘要:MapReduce近几年比较热的分布式计算编程模型,以C#为例简单介绍下MapReduce分布式计算。阅读目录背景 Map实现 Reduce实现支持分布式总结背景某平行世界程序猿小张接到Boss一项任务,统计用户反馈内容中的单词出现次数,以便分析用户主要习惯。文本如下: const s...
阅读全文
摘要:阅读目录:使用场景算法原理虚拟节点代码示例使用场景以Redis为例,当系统需要缓存的内容超过单机内存大小时,例如要缓存100G数据,单机内存仅有16G时。这时候就需要考虑进行缓存数据分片,也即是把100G的数据拆分成多块小于单机内存的数据。例如以10G为单位,拆分10份,存储到多台机器节点上。 但是...
阅读全文
摘要:接上篇探索c#之尾递归编译器优化累加器传递模式(APS)CPS函数CPS变换CPS尾递归总结累加器传递模式(Accumulator passing style)尾递归优化在于使堆栈可以不用保存上一次的返回地址/状态值,从而把递归函数当成一个普通的函数调用。递归实际上是依赖上次的值,去求下次的值。 如...
阅读全文
摘要:1、探索c#之函数创建和闭包2、探索c#之尾递归编译器优化3、探索c#之不可变数据类型4、 探索c#之递归APS和CPS5、探索c#之一致性Hash详解6、探索c#之微型MapReduce7、探索c#之虚拟桶分片8、探索c#之布隆过滤器(Bloom filter)9、探索c#之Async、Await...
阅读全文
摘要:阅读目录:不可变对象自定义不可变集合Net提供的不可变集合不可变优点不可变对象缺点不可变对象不可变(immutable): 即对象一旦被创建初始化后,它们的值就不能被改变,之后的每次改变都会产生一个新对象。var str="mushroomsir";str.Substring(0, 6)c#中的st...
阅读全文
摘要:C#/64位/Release是有JIT编译器进行尾递归优化的(非C#编译器优化)。
C#/32位或C#/Debug模式中JIT是不进行优化的。
简单的尾递归优化成while循环,
复杂的尾递归,F#编译会生成IL指令Tail进行优化
阅读全文
摘要:阅读目录:动态创建函数匿名函数不足之处理解c#中的闭包闭包的优点动态创建函数大多数同学,都或多或少的使用过。回顾下c#中动态创建函数的进化:C# 1.0中: public delegate string DynamicFunction(string name); public static Dy...
阅读全文