分布式系统:原理与范式(第二版)

需积分: 10 4 下载量 177 浏览量 更新于2024-07-22 收藏 20.22MB PDF 举报
"分布式系统:原理与范式,第二版,安德鲁·S·坦嫩鲍姆,马腾·范·斯坦,ISBN: 0-13-088893-1,出版社:培生教育,第二版" 《分布式系统》这本书由安德鲁·S·坦嫩鲍姆和马腾·范·斯坦合著,是分布式计算领域的经典著作。作者坦嫩鲍姆拥有麻省理工学院的学士学位和加州大学伯克利分校的博士学位,并在荷兰阿姆斯特丹自由大学担任计算机科学教授,领导计算机系统小组。他曾任高级计算和成像研究生院的院长,研究领域包括编译器、操作系统、网络和局部分布式系统,目前主要关注计算机安全,特别是在操作系统、网络和大型广域分布式系统中的应用。 该书的第二版深入探讨了分布式系统的概念和模式,涵盖了从基础理论到实际应用的广泛内容。分布式系统是多个独立计算机通过网络连接,协同工作,共同对外提供服务的系统。这些系统的特点包括并发性、透明性、容错性和可扩展性,它们能够处理大量数据,提供高可用性和性能。 书中可能涵盖以下关键知识点: 1. **分布式系统的基本概念**:定义、特点、组成要素,如进程通信、资源管理、命名和寻址、时间同步等。 2. **分布式计算模型**:包括客户端-服务器模型、P2P模型、微服务架构等,以及它们在不同场景下的应用。 3. **进程间通信**:远程过程调用(RPC)、消息传递机制(如MPI)和网络协议栈,如TCP/IP协议族。 4. **分布式数据管理和一致性**:包括CAP定理、分布式事务处理、锁机制、分布式数据库和NoSQL数据库的设计。 5. **容错和可靠性**:通过备份、复制、检查点、故障恢复策略来确保系统的高可用性。 6. **分布式算法**:如选举算法、共识算法、分布式排序和搜索算法等。 7. **安全性**:涵盖认证、授权、加密和隐私保护在分布式系统中的实现。 8. **网络计算**:云计算和网格计算的概念,以及虚拟化技术在实现资源池化中的作用。 9. **分布式文件系统**:如GFS、HDFS等,以及大数据处理框架如MapReduce和Spark。 10. **并行和分布式编程模型**:如OpenMP、MPI、Hadoop API等,以及并发控制和任务调度策略。 作者坦嫩鲍姆不仅在学术研究上有深厚造诣,还是一位软件开发者,他是阿姆斯特丹编译器套件的主要架构师,这是一个用于编写可移植编译器的工具包,这强调了他在理论与实践之间的桥梁作用。 《分布式系统:原理与范式》是理解、设计和实现分布式系统的重要参考资料,适合计算机科学专业的学生、研究人员和从业人员学习,帮助他们掌握构建大规模、高性能、可靠的分布式系统的必备知识。

try: import thop except ImportError: thop = None logger = logging.getLogger(__name__) @contextmanager def torch_distributed_zero_first(local_rank: int): if local_rank not in [-1, 0]: torch.distributed.barrier() yield if local_rank == 0: torch.distributed.barrier() def init_torch_seeds(seed=0): torch.manual_seed(seed) if seed == 0: cudnn.benchmark, cudnn.deterministic = False, True else: cudnn.benchmark, cudnn.deterministic = True, False def select_device(device='', batch_size=None): s = f'YOLOv5 🚀 {git_describe() or date_modified()} torch {torch.__version__} ' cpu = device.lower() == 'cpu' if cpu: os.environ['CUDA_VISIBLE_DEVICES'] = '-1' elif device: # non-cpu device requested os.environ['CUDA_VISIBLE_DEVICES'] = device assert torch.cuda.is_available(), f'CUDA unavailable, invalid device {device} requested' cuda = not cpu and torch.cuda.is_available() if cuda: n = torch.cuda.device_count() if n > 1 and batch_size: # check that batch_size is compatible with device_count assert batch_size % n == 0, f'batch-size {batch_size} not multiple of GPU count {n}' space = ' ' * len(s) for i, d in enumerate(device.split(',') if device else range(n)): p = torch.cuda.get_device_properties(i) s += f"{'' if i == 0 else space}CUDA:{d} ({p.name}, {p.total_memory / 1024 ** 2}MB)\n" s += 'CPU\n' logger.info(s.encode().decode('ascii', 'ignore') if platform.system() == 'Windows' else s) # emoji-safe return torch.device('cuda:0' if cuda else 'cpu') def time_synchronized(): if torch.cuda.is_available(): torch.cuda.synchronize() return time.time()

2023-06-13 上传