软件架构 Python实现 笔记 (一) 扩展/并发概念
Contents
1.扩展相关
水平扩展:增加服务器数量, 负载均衡的服务器集群 垂直扩展:单台机器优化CPU或者增大RAM
并发性 | 延迟 | 性能 | 可拓展性 |
---|---|---|---|
高 | 低 | 高 | 高 |
高 | 高 | 不确定 | 不确定 |
低 | 高 | 低 | 低 |
一个理想系统有高并发/低延迟,这样的系统具有较高的性能,并且能够更好地进行水平拓展和垂直拓展
高并发也低延迟的系统,性能特征比较难确定,可拓展性对其他因素非常敏感 比如当前系统负载,网络阻塞,计算资源和请求的地理分布等
2.并发性
系统的并发性是系统能够同时执行工作而不是按顺序执行工作的程度。 一个并发应用程序相比于顺序执行的程序在给定时间内可以执行更多的工作单元。
常用的技术:
2.1.多线程
线程是可以由CPU执行的最简单的编程指令序列。
一个程序可以有任意数量的线程组成。通过将任务分配给多个线程,一个应用程序可以同时执行更多的工作。
所有线程都在同一进程中运行
2.2.多进程
另一个并发扩展程序的方法是在多个进程中运行,而不是在单个进程中运行。
在消息传递和共享内存方面,多进程相比多线程涉及更多的开销。
然而,多进程操作可以使执行大量CPU密集型计算的程序受益更多。
2.3.异步处理
在这种技术中,操作时异步执行的,没有特定的任务顺序。
异步处理通常从任务队列中挑选任务,并安排它们在将来的时间执行,
通常在回调函数或者特殊的future对象中接收结果。异步处理通常发生在单个线程中。
python3中有thread模块,multiprocess模块,asynico模块
将异步执行与线程,进程相结合的并发处理形式可以通过concurrent.future模块获得。
3.并发性/并行
并发: 两个任务被同时安排执行
并行: 两个任务必须在一个给定时刻同时执行
两个线程在一个单核CPU上执行字节码计算并不能完成并行计算, 因为CPU一次只能容纳一个线程。 从程序员角度看,他们是并发的,由于CPU调度器实现了线程进出的快速切换。
但是在多核CPU上, 两个线程可以在不同的内核中执行并行计算,这是真正的并行性。
Author tmackan
LastMod 2018-08-05