随笔分类 -  CLR

摘要:这篇文章发布于我的 github 博客:[原文](http://lxconan.github.io/2014/10/13/difference-between-debug-and-release-build-on-speed/) 在真正开始讨论之前先定义一下 Scope。 * 本文讨论的范围限于执行速度,内存占用什么的不在评估的范围之内。 * 本文不讨论算法:编译器带来的优化基本上属于底层的优化,难以从质上提升执行速度。程序的快慢主要影响因素是采用的数据结构和算法这些高层次上的东西。我们接下来的讨论建立在这些高层次的东西已经被充分考虑的基础之上。 阅读全文
posted @ 2015-08-28 23:13 TW-刘夏 阅读(7514) 评论(10) 推荐(26) 编辑
摘要:这篇文章是从我的 github 博客 http://lxconan.github.io 导入的。 今天这篇文章是准备瞎扯的。平常工作的时候,我希望尽可能的将一切自动化,让自己尽可能的舒适与懒惰。两个输入设备(键盘+鼠标)太累,我只想用一个,例如我不希望翻箱倒柜的去翻找 GO-Agent 在哪里,我希望用一个命令就可以开启它。我希望用一个脚本就完成整个工程的依赖的下载,构建,打包,部署,然后让 Pipeline 去跑自动化的单元测试和集成测试。总之,好像有命令行就足够了,我不需要GUI。 但是,这是不可能的。即使在工作中 80% 的时间都在敲打键盘,但是其余的事件我都在浏览器上转悠,这需要鼠标(我知道 Chrome 上有类似 Vim 快捷键的东西,但是它是有副作用的,基于这种考虑,我很少在测试环境下使用它)。在其他的一些场景下,我也希望有接口有图形化的表示,例如,查看 git 的分支。还有一个领域,那就是 Coach。 阅读全文
posted @ 2014-10-16 08:31 TW-刘夏 阅读(506) 评论(0) 推荐(0) 编辑
摘要:我的简历上从来就不敢出现“精通”两个字,但是每次有招聘简历推荐过来的时候,各种“精通”就映入了我的眼帘。无奈啊,确实还是不行啊。例如今天在逛园子的时候发现这篇文章的回复中出现了关于boxing的讨论。发现有一个情况我原来的理解是错误的。于是留此一篇备忘。 阅读全文
posted @ 2012-11-29 23:12 TW-刘夏 阅读(1972) 评论(6) 推荐(7) 编辑
摘要:最近从架构的角度做了一个 Windows 8 下 Metro Style 应用程序开发介绍的讲座。稿子公开。 如有问题欢迎指正。 下载地址: 阅读全文
posted @ 2012-09-09 21:56 TW-刘夏 阅读(4593) 评论(10) 推荐(6) 编辑
摘要:按照上一篇中的计划,这一篇应当从实践的角度分析如何在Lock Free Code中注意Out Of Order问题带来的影响。但是不想这一段时间出了这么多的事情,包括.NET的内存模型实现上出了Bug让人们更加关注这部分的问题。那么这篇就对前几篇小小随笔做一个全面的解释,改正文章里出现的理解错误,或容易被理解错误的地方。 阅读全文
posted @ 2008-09-02 22:13 TW-刘夏 阅读(2045) 评论(2) 推荐(1) 编辑
摘要:虽然我们整篇都在讨论.NET下的Multi-threading的问题,但是实际上很多问题都是可以类推的。例如前几次我们反复的说道了关于CriticalSection的问题。说它比MUTEX有何优越之处,例如速度就是一个明显的优势。但是从留言中发现在这个问题上存在着一些误会。今天不妨就闲扯一下这个问题。 阅读全文
posted @ 2008-07-31 22:38 TW-刘夏 阅读(1822) 评论(7) 推荐(0) 编辑
摘要:话说看了Angel Lucifer兄的留言之后,发现果然Microsoft在June CTP中实现了SemaphoreSlim,其中不但考虑了与旧的同步对象在接口上的一致性,还加入了Cancellation的检查。唉,怪我没有跟上形势!那么这篇就成班门弄斧了。不过,还应该坚持把它写完,善始善终,就当为大家整理思路。取笑罢了:-) 阅读全文
posted @ 2008-07-30 20:44 TW-刘夏 阅读(2149) 评论(8) 推荐(0) 编辑
摘要:信号量历史悠久,折磨死了一代又一代的计算机专业学生,但是不得不承认其在Multi-thread环境下的巨大作用。最经典的案例莫过于管理一个环状缓冲区。.NET 中的Semaphore对象等同于Win32中的Semaphore。属于内核级对象,因此使用它的代价就比较大了。并且Semaphore对象每次仅仅能够等待一个Count,这有的时候让事情变得有些烦,例如你可能不得不将环状缓冲区分割为一个个的Chunk(实际上这是一个好方法,因为我们应该对于Cache进行优化)。Qt中的信号量可以一次获得多个Count,感觉很方便。综上,我们希望自己动手实现一个轻量级的,支持一次获得多个资源的信号量。 阅读全文
posted @ 2008-07-29 22:56 TW-刘夏 阅读(3904) 评论(10) 推荐(1) 编辑
摘要:多核处理,并行设计已经成为了计算机发展不可阻挡的趋势之一。越来越多的技术人员开始关注多线程程序设计。但是选择什么样的环境来介入多线程程序设计往往是一个比较头疼的问题。应该说,目前的许多环境并没有为多线程建立良好的模型,例如C和C++。为此,人们试图在这种环境中通过添加库的方式为其加入多线程的功能。但是,这显然是不合适的,实际上许多的时候,程序库根本不能解决所有的问题,我们真正需要的是一种将多线程纳入其规范体系之内的环境。 阅读全文
posted @ 2008-07-28 15:59 TW-刘夏 阅读(2338) 评论(8) 推荐(0) 编辑
摘要:上一篇随笔“"Loads are not reorderd with other loads" is a FACT!! 续:不要指望 volatile”中已经提到了。.NET的内存模型在volatile load上的实现是错误的。这在今天终于是半个官方的结论了。有关这个讨论的结论可以参考“A bit more formalism as to why CLR's MM is broken on x86/x64 ”。关于内存模型(MM)的问题枯燥,缩略词跟别的领域有过之无不及,为了便于说明趁着这个机会罗列一下。 阅读全文
posted @ 2008-07-21 01:52 TW-刘夏 阅读(1761) 评论(6) 推荐(0) 编辑
摘要:上一篇随笔中提到了volatile,实际上由于上一篇中提到的问题,volatile已经越来越远离其应有的含义了。在说这个问题之前,我们又要提.NET的内存模型问题(以下简称MM),我不指望在这里长篇大论的说其内存模型是如何的。简单的说就是以下的几句话... 阅读全文
posted @ 2008-07-19 19:55 TW-刘夏 阅读(4570) 评论(3) 推荐(0) 编辑
摘要:对于多线程编程的难度,再充分的心里准备也许都是不够的。前一段时间一直在整理一些有关多线程编程的内容(一个对多线程算法库编写过程中的经验积累)。而在前天,一篇来自于Microsoft 的PFX的Joe的博文惊现:"Loads cannot pass other loads" is a ~myth ,着实让人惊出了一身冷汗。 阅读全文
posted @ 2008-07-19 11:57 TW-刘夏 阅读(2374) 评论(11) 推荐(1) 编辑
摘要:非顺序执行:英文称作 Out-of-order execution,也称乱序执行。是一种在高性能CPU设计中所广泛采用的技术。这个技术企图最大限度的利用CPU的各个周期,改变指令的执行顺序,以降低慢操作或其他操作造成的延迟。这里所说的改变执行顺序,是CPU的行为,不是编译器的行为! 阅读全文
posted @ 2008-06-15 13:36 TW-刘夏 阅读(1945) 评论(3) 推荐(0) 编辑