对象是过程的抽象,线程是调度的抽象;
并发是一种解耦策略:把做什么(目的)和何时做(时机)分解开;
响应时机、吞吐量;
并发防御原则:单一权责原则:分离并发代码与其他代码;
限制数据作用域:synchronized;谨记数据封装,严格限制对可能被共享的数据的访问;
使用数据副本;
线程应尽可能地独立:尝试将数据分解到可被独立线程操作的独立子集;
了解执行模型:生产者-消费者模型、读者-作者模型、宴席哲学家
警惕同步方法之间的依赖:避免使用一个共享对象的多个方法;解决:基于客户端的锁定,基于服务端的锁定,适配服务端;
保持同步区域微小:很难编写正确的关闭代码(死锁);测试线程代码;
限定资源:并发环境中有着固定尺寸或数量的资源;
互斥:每一时刻仅有一个线程能访问共享数据或共享资源;
线程饥饿:一个或一组线程在很长时间内或永久被禁止;
死锁:两个或多个线程互相等待执行结束;每个线程都拥有其他线程需要的资源,得不到其他线程拥有的资源,就无法终止;
活锁:执行次序一致的线程,每个都想要起步,但发现其他线程已经“在路上”;
由于竞步的原因,线程会持续尝试起步,但在很长时间内却无法如愿,甚至永远无法启动;
本文深入探讨了并发编程的核心概念,包括并发作为一种解耦策略,其关键在于将目标与时机分离。文章阐述了响应时机、吞吐量的重要性,并提出了并发防御原则,如单一权责、数据作用域限制、使用数据副本等。同时,详细解析了互斥、线程饥饿、死锁和活锁等并发问题,以及如何通过理解执行模型和避免同步方法间的依赖来应对这些挑战。
6581

被折叠的 条评论
为什么被折叠?



