线程与锁模型优缺点
2018-02-20 本文已影响19人
每天学点编程
请关注我的微信公众号
个人微信公众号
技术交流群 (仅作技术交流):642646237
请关注我的头条号:
线程与锁模型优点
1.适用面很广,是其他许多技术的基础,适用于解决很多类型的问题。
2.线程与锁模型更接近于“本质”——近似于对硬件工作方式的形式化——正确使用时,其效率很高。这也意味着它能够解决从小到大不同粒度的问题。
3.线程与锁模型可以被轻松地集成到大多数编程语言中。
语言设计者们可以轻易让一门指令式语言或面向对象语言支持线程与锁模型。
线程与锁模型缺点
1.线程与锁模型没有为并行提供直接的支持。
2.线程与锁模型仅支持共享内存模型。
如果要支持分布式内存模型(无论是地理分布型或者容错型),就需要寻求其他技术的帮助。
线程与锁模型不适用于单个系统无力解决的问题。
3.最大的缺点在于无助。编程语言层面并没有提供足够的帮助。
不易察觉的错误
多线程的难点不在于难以编程,而在于难以测试。
多线程的bug很难重现。
可维护性
代码不可能不变更。
要全程保证所有对象的同步都是正确的、必须按照顺序来获取多把锁、持有锁时不调用外星方法。
谨慎地思考多线程代码。除了谨慎地思考,就是更谨慎地思考。
线程与锁模型的原则
访问共享变量时需要同步、按照全局的固定的顺序来获得多把锁、持有锁时避免调用外星方法。
内存模型
会对内存访问进行乱序执行的却不止Java。
大多数语言没有对内存模型做出完善的定义,没有明确地说明乱序执行何时发生以及如何发生。在这方面Java是先驱者,是第一个完整定义内存模型的主流语言。C和C++是在C 11和C++ 11的标准中才补充了内存模型。