• 【读书笔记】 多线程程序常见bug


    所读的文章链接在这里 或者最初的出处是在这里   http://www.parallellabs.com/2010/11/23/concurrency-bugs-2/

    多线程的东东之前也接触过一些,自己在写这方面代码时也是格外谨慎,常常考虑的是加锁避免死锁的问题,加锁影响性能的问题,还有线程/进程间通信的问题。

    在这篇文章中,作者总结说多线程中程序bug一般有三类,死锁,违反原子性操作和违反SC(sequentail consistency);

    或者用文中的表达方式就是: deadlock, atomicity violation and ordering violation.  已经有不少工具可以帮助程序员发现deadlock,但是后两个就需要依靠程序员的自觉啦。。这个让我想起GPU下的编程。。。

    这里作者举出的例子都很好,浅显易懂,解决方法有不少,例如变量私有化,加锁等,来解决ordering violation OR atomicity violation的问题。

    我的感受是加锁是一个颇有通用性的方法,因为加锁是一种逻辑处理上的倒退,强行将并行处理逼退到串行时代,所以加锁不是随心所欲挥霍无度的,而都是用在最需要它的地方。加锁在将带来串行化的同时,自然会解决由于并行化而引入的各种问题。

    但是,

    没有免费午餐,加锁会带来性能的损失,这个显而易见,这个缺点是相对于程序员的贪婪而言的,既要并行处理的性能收益,还不要并行处理引入的数据竞争问题。funny。这就涉及到了无锁处理,而这一问题还是可以作为国内top10大学的博士毕业论文主题的。颇有挑战的一个问题,但是我认为他是对于程序编写的一种改进,并不会从根本上解决并行处理中引入的数据竞争问题,至多是将本可以私有化的数据变为线程私有,或者引入轻量级的锁,如利用cache的一致性所形成的锁/同步机制;

    也许是我的理解有误。

    继续学习。药不能停哈哈哈^_^

    最后记录两位教授的链接,可以看看学术界对于mutli-threading的研究:

    http://pages.cs.wisc.edu/~shanlu/#research

    http://cseweb.ucsd.edu/~yyzhou/

  • 相关阅读:
    进制
    变量
    cmd命令和快捷键
    面向对象和面向过程
    iterations 快捷键
    SQL语句分类和语法
    MySQL语法规范
    Web-Scale-IT 到底是啥?
    安全的应用程序开发和应用程序安全防御
    如何像后端一样写前端代码?
  • 原文地址:https://www.cnblogs.com/superniaoren/p/3350593.html
Copyright © 2020-2023  润新知