Browsed by
分类:技术读物

读书笔记:对线程模型的批评

读书笔记:对线程模型的批评

——感谢Ian.Sian投递本文——

多线程模型是主流的并发编程模型。在过去几十年来,多线程模型一直是开发并发程序的有力工具。然而,它的历史并非总那么美好。1997年,NASA 的“火星探路者”号在执行任务的途中遭遇了严重的时序异常(参见 “What really happend on Mars“,注目 follow-up 中的现身说法),无法发回探测数据。如果不是 NASA 远程刷新了程序,它的结局就只能是报废在火星上。这一切都是由程序中潜藏的一个优先级反转 bug 造成的。更早的例子还有80年代的一系列 Therac-25 型医用粒子加速器事故。在这些加速器释放出的过量辐射照射之下,数位病人死亡。事后调查显示,至少有一次发生事故的原因,是加速器的控制软件中,存在一个只能由特定操作序列引发的竞争条件 bug。你也许认为这些只是陈年往事,但是直到现在,即便是世界500强公司们高价买来的信息系统,也同样避免不了这些问题。这导致许多程序员认为线程是个潘多拉魔盒,对它采取能躲就躲的态度。然而近来计算机的发展使得躲猫猫的空间越来越小:随便从市场上淘一个CPU,它里面也有不止一个核心。未来的程序员只会有越来越多的机会接触到并发编程,而无法再独善其身了。

加州大学伯克利分校教授,爱德华 A. 李在2006年做了一次题为《线程的麻烦 (The Problem with Threads)》的学术报告。在报告中他提到:看上去,多线程只是对核心语言的小小扩展,甚至可以以第三方库的形式存在。但实质上,多线程程序和原有的核心语言编写的程序已经完全不同了。其原因在于,由于多线程程序可能以任意的次序交错执行,程序再也无法像顺序执行时那样产生确定的结果。多线程程序容易编写(因为写的是顺序程序),但是难分析,难调试,更容易出错。

在我的想法中,产生问题的根源,是多线程模型作为对并发问题的一个抽象,是很不完善的。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (22 人打了分,平均分: 4.32 )
Loading...
一些有意思的文章和资源

一些有意思的文章和资源

又到了向大家介绍一些最近我在网上发现的有价值的东西的时候了。(下面的链接中很多都被墙)

  • 本站的关于排序的文章有很多,对于排序算法来说,其受到要排序的个数和数据的杂乱程度的影响,我们知道比较稳定的排序算法是快速排序和归并排序,归并排序对于大量的数据排序效果是非常好的,尤其是我们可以进行并行的排序。这里有一个并行归并排序的算法的源代码,你可以参考一下 – “Parallel Merge Sort”。
  • 说到“奇技淫巧”和算法,这里有一个文章向你展示了C语言中使用位操作可能完成的各种算法,很有意思。请参看 – “The Aggregate Magic Algorithms
  • 这里有篇文章教你如何取得一个在线的哈佛大学的硕士学位,文章中说了一些相关的事宜,包括一些收费情况,并且展示了一张文凭。这里有一个网页说明了哈佛软件工程学位(Software Engineering)的所需要学习的科目,比如:Java和分布式计算,分布式/企业级计算,设计模式和Java,通讯协议,高级数据网络,Web开发,计算理论,Perl实践,Unix系统编程……我不知道我们的国家各个大学的硕士在学什么,因为我没有读过硕士,但好像现在的计算机研究生只是导师用来挣钱的免费资源,而且,实在不知道研究生在校研究什么。不管怎么样,从这看来,我们的大学好像并没有教给学生计算机的技术。比如在“如何学好C语言”和“如何学好C++语言”中我提到的那些书,那些才是大学里应该学的。我国的教育还真不是一般的落后,不过你不妨试试哈佛的在线学位。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (14 人打了分,平均分: 4.14 )
Loading...
WSDL 1.1 中文规范

WSDL 1.1 中文规范

WSDL规范目前最新的版本是2.0 ,但是目前大部分还是按1.1的版本进行使用,而且1.1的内容看上去比2.0也简单些,所以我就翻译了这个版本。

作为一种《炒作过度的技术和概念》的一类,WEB Service的确是太过重量级,对于小型的应用,还是因该避免去使用xml和SOAP这些技术。但是在企业级的应用,WEB Service已经开始成为了一种常态,所以对其有一定了解或多或少都是有一些好处的。

当然,通过读规范来学习一门技术的方法,从来都不是一种好的学习方法,规范只是配合你学习的参考。而且WSDL1.1规范中笔误太多,笔者就发现了两处,都一一做了修正。

原文的地址在:http://www.w3.org/TR/wsdl ,学习WSDL,需要有一定XML,XML Schema XSD,SOAP的相关知识,请在阅读时特别注意。

另外WSDL1.1是一个宽泛的规范,所有的语法都以非正式的形式出现,而且为了满足WEB Service 扩展性的需求,也不可能定义出详尽的语法,请在阅读时特别注意。

我的翻译版本以word形式提供,请要转载的同学们别把酷壳logo去掉的,转载请注明出处。

由于个人水平有限,翻译难免出现错误。还请读者海涵。

下载:WSDL 中文规范1.1

好烂啊有点差凑合看看还不错很精彩 (6 人打了分,平均分: 3.67 )
Loading...
(麻省理工免费课程)计算机科学和编程导论

(麻省理工免费课程)计算机科学和编程导论

以前本站推荐过麻省理工的C/C++的课程,今天在他们的网站看到上有一组关于计算机科学和编程导论的免费公开课(视频是Youtube的),我看了几个课程,我觉得讲得很系统啊,而且有一点一通百通的感觉。虽然是理论课,但是可以感到我国的教育还是有很大差距的。这个组课程推荐给大家(需要翻墙),视频都有字幕,计算机科学系毕业的同学应该会很容易听懂。强烈推荐。(网友Aslan指出已经有人搬运到优酷上了,链接在这里,遗憾的是没有字幕,另外,不知道为什么会说是Python学习)

 

1: Introduction and Goals; Data Types, Operators, and Variables

Youtube(英文字幕)

优酷(无字幕)

 

2: Branching, Conditionals, and Iteration

Youtube(英文字幕)

优酷(无字幕)

 

3: Common Code Patterns: Iterative Programs

Youtube(英文字幕)

优酷(无字幕)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (11 人打了分,平均分: 4.64 )
Loading...
预发布环境,Tag发布机制和可重复的部署过程

预发布环境,Tag发布机制和可重复的部署过程

下面文章由网友吕毅投递,源文是:http://blog.lvscar.info/?p=427

—————————————————————————————————————————————

周末聚会,无意间聊起建筑行业。自己是搞软件开发的,我们的行业从建筑设计/施工过程中借鉴了大量的概念,隐喻,名词。可以说软件就是现实中伴随整个人类历史发展的“建筑”在虚拟空间中的投影。有个两年前问过其他朋友的问题,这次友人又再次提起,“为什么建筑设计过程中没有普遍性的采用版本控制呢?” 瞎扯了一干各种原因后,我们几乎同时想到一个名字”Joel”,建筑设计行业或许缺乏像Joel Spolsky一样十数年如一日,把自己丰富的经验和深入的思考转化成一篇篇文章以向新人传授软件开发过程中那些容易被忽略的概念。高傲的黑客们会对CMMI之类的认证抱以鄙夷之情,但对Joel整理出的12条写出更好软件的”最佳实践”,大家甚至把此称为审视其他团队开发过程的“Joel TEST”以推崇

这12条测试如下:

1. 是否启用版本控制?

2. 是否可以一步构建?

3. 是否进行每日构建?

4. 是否有bug跟踪列表?

5. 是否在修改bug后,才开始写新代码?

6. 是否及时更新工作计划?

7. 是否在开发前编写了大家一致认可的功能文档?

8. 是否有安静的工作环境?

9. 是否在使用最好的软件开发工具?

10.是否有专职测试人员?

11.是否在面试时以实际编写代码来检查求职者?

12.是否利用陌生人进行可用性测试?

你所在的团队符合其中的几条呢? 觉得这些条目太一般,软件开发原本就该如此? Joel Test写于十年前,一个Windows XP,Mac OS X,Ubuntu都还没有面世的年代。 如果你觉得这些条目有些过时了,Google中搜索“Joel Test”,你可以看到这十年内很多对此进行更新的尝试, 比如这两个页面“The Joel Test Update for 2010″,“Joel Test for web dev”.

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (6 人打了分,平均分: 4.17 )
Loading...
那些炒作过度的技术和概念

那些炒作过度的技术和概念

StackExchange.com上有一个贴子在评论着最近20年来被炒作过度的技术,对于出现的结果,大多数赞同,也有一些不赞同。下面我从前15名挑了10个(Java的WORE我去掉了,TDD我也去掉了,因为我觉得他们应该没有炒作过度,而且都不错),按原贴的顺序罗列如下:(后面的一些评论是我加的,欢迎大家讨论)

Top 10 过度炒作的技术和概念

  • Unified Modeling Language (UML) – UML是一个程序员交流想法的不错的工具,但是他离程序员真正需要的设计工具还差得很远,比如:设计是否符合需求、架构设计、数据流等等。只有为数不多的程序员使用这个工具交流想法,而没有用在具体工作中。
  • Sharepoint – 现在N多的公司都在用微软的这个东西做公司内部的Intranet。不过安装和维护起来,代价相当的大。但是其市场做的很成功,不对技术上来说对技术人员来说,相当的蹩脚。Sharepoint的设计没有认真地分析过业务流程,仅仅是一个文档存储地。看上去我们似乎可以做任何的事,但是如果你要用其来管理你的项目和track你的项目问题,你会发现其是无比的难用。
  • eXtensible Mark-up Language (XML) –  XML嘛,以前说过很多了(XML1 XML2)我们用他来做和程序数据封装,用来做配置文件,用来做网络传输格式。我们的程序处理起XML来,又慢,又不经济,没有工具,几乎无法维护XML文件。XML用来做数据封包真是很不经济,Yaml和JSON那个不比它简单?用XML来做程序配置文件不知道是谁想出来的主意,相当的愚蠢,看看Unix/Linux下的配置文件,简单易读,相当容易维护。真是高科技啊。
  • SOAP, XML-RPC, WSDL 的 Web Services – 这个东西前几年炒的很凶。所有人都相信,这是程序员的未来。可惜的,其中的复杂和不一致,相当的令人恶心。SOAP的那个S居然还是Simple!看来,扯上XML的都不会是什么好的东东。不过,个人认为,CORBA比他更恶。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (27 人打了分,平均分: 4.26 )
Loading...
64位平台C/C++开发注意事项

64位平台C/C++开发注意事项

http://www.viva64.com/en/l/上例出了28个在64位平台上使用C/C++开发的注意事项,对于进入64位时代的程序员应该去看看这28个事项,这些英文读物对于有C/C++功底的朋友读起来应该并不难,我估计大约20-30分钟可以精读完一篇(或者更快),下面是这28个注意事项的列表。相信对大家一点有帮助。

  • Lesson 01. What 64-bit systems are.
  • Lesson 02. Support of 32-bit applications.
  • Lesson 03. Porting code to 64-bit systems. The pros and cons.
  • Lesson 04. Creating the 64-bit configuration.
  • Lesson 05. Building a 64-bit application.
  • Lesson 06. Errors in 64-bit code.
  • Lesson 07. The issues of detecting 64-bit errors.
  • Lesson 08. Static analysis for detecting 64-bit errors.
  • Lesson 09. Pattern 01. Magic numbers.
  • Lesson 10. Pattern 02. Functions with variable number of arguments.
  • Lesson 11. Pattern 03. Shift operations.
  • Lesson 12. Pattern 04. Virtual functions.
  • Lesson 13. Pattern 05. Address arithmetic.
  • Lesson 14. Pattern 06. Changing an array’s type.
  • Lesson 15. Pattern 07. Pointer packing.
  • Lesson 16. Pattern 08. Memsize-types in unions.
  • Lesson 17. Pattern 09. Mixed arithmetic.
  • Lesson 18. Pattern 10. Storage of integer values in double.
  • Lesson 19. Pattern 11. Serialization and data interchange.
  • Lesson 20. Pattern 12. Exceptions.
  • Lesson 21. Pattern 13. Data alignment.
  • Lesson 22. Pattern 14. Overloaded functions.
  • Lesson 23. Pattern 15. Growth of structures’ sizes.
  • Lesson 24. Phantom errors.
  • Lesson 25. Working with patterns of 64-bit errors in practice.
  • Lesson 26. Optimization of 64-bit programs.
  • Lesson 27. Peculiarities of creating installers for a 64-bit environment.
  • Lesson 28. Estimating the cost of 64-bit migration of C/C++ applications.
好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 5.00 )
Loading...
Google 需要性爱

Google 需要性爱

看到一篇趣文Google Needs Sex,翻译过来。

Brad DeLong 给我们写了 两篇关于“Google遇到的麻烦”的文章(墙),这两篇文章基本上是说, 制造网络欺诈和网络垃圾信息的人会尽其一切努力来和搜索引擎进行博弈,这样一来,其会让搜索到的结果对我们越来越没有帮助(译注:百度的竞价排名成为了制造网络欺诈和网络垃圾信息甚至洗脑的温床)。于是,人们开始去使用其它一些影响地较少的搜索引擎,准确的说,是那些垃圾信息和欺诈信息的东西还不适应于这些搜索引擎。

这让我想到了Sex。

如果你查看一下进化论,你就会知道为什么有性繁殖是有进化性的,是有可持续性的,而进化也是需要巨大的成本的。

为什么自然界不用克隆来繁殖呢?我所理解的最有说服力的答案是—— 防御寄生生物。如果每一代的生物体都和上一代完全的一样,寄生生物就总有一天可以破解生物体的防御,就是为什么!如果我们的某个香蕉园里种植着“克隆香焦” ,那么一旦某种病菌传播开来,那么我们整个香蕉园里的全部香蕉将毁于一旦。所以,混杂基因的模式会让寄生生物或病毒更难破坏我们的防御。

因此,Google的这些欺诈信息和垃圾信息就像是寄生在人体上的寄生体一样,它们已经非常适应Google的搜索引擎。(译注:百度上的寄生体则像是百度自己养的宠物)

我不知道“搜索引擎的性爱”会是什么样的,但是很明显,Google需要一些。

(全文完)

好烂啊有点差凑合看看还不错很精彩 (11 人打了分,平均分: 4.27 )
Loading...
一些有意思的网站和贴子

一些有意思的网站和贴子

各位朋友,又到了介绍各种杂项的时候了,正如以前的这篇这篇文章一样,本篇文章也给你介绍一些最近出现的一些有趣的东西。希望你能喜欢。

  • 首先是华尔街的一篇报道,2011年最好和最不好的工作,其引用了CareerCast.com的数据,其列出了100个工作种类,并根据薪资、工作环境、工作鸭梨、体力消耗和就业前景做了一个排序。结果排第一位的是“软件工程师”,其理由是:高科技产品的需求呈爆炸式增长,以及人们对iPod、平板电脑、和其它科技产品应用软件的喜好,软件工程师被评为最佳职业。软件工程师有弹性工作时间,可以在家办公,而且每个月都有猎头找来。而最差是的则是码头工人。
[bestjobspromo]
  • 接下来是一个叫“Java pass by value”的长贴,楼主说有一天在LinkedIn.com上看到了Java Group里有人讨论Java是pass by value的,长达240+贴子。贴子里说,如果你使用Java的原始类型如int, long,就是传值,如果你用object, array,其实传的是一个引用的拷贝,所以,Java是传值的。呵呵,你觉得有道理吗?于是,成就了这个大讨论战。reddit.com上也有N多的回贴。有空可以看看。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (7 人打了分,平均分: 4.57 )
Loading...
几篇技术文章

几篇技术文章

The Art of Unix

http://www.faqs.org/docs/artu/

Perl for Impatient Developer

http://blob.perl.org/books/impatient-perl/iperl.pdf

Game Development with Javascript

http://www.brighthub.com/hubfolio/matthew-casperson/blog/archive/2009/06/29/game-development-with-javascript-and-the-canvas-element.aspx

Introduction to x64 Assembly

http://software.intel.com/en-us/articles/introduction-to-x64-assembly/

Database Fundamental

https://www.ibm.com/developerworks/wikis/display/db2oncampus/FREE+ebook+-+Database+fundamentals

好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 4.33 )
Loading...