进程与线程
- 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
- 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源
并发
- 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其他线程处于挂起状态。这种方式我们称之为并发
锁
- 锁(lock)作为用于保护临界区(critical section)的一种机制,被广泛应用在多线程程序中,比如Java(synchronized , ReentrantLock…)
- 减少或规避锁竞争的一些策略:
- 分拆锁
- 分离锁
- 避免共享变量缓存
- 使用并发容器如Amino
- 使用Immutable数据和ThreadLocal中的数据
并行
- 当系统有一个以上的CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)
- 和并发的区别:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生
集群
- 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理
- 集群配置是用于提高可用性和可伸缩性。其实,分布式系统可以表达为很多机器组成的集群,靠彼此之间的网络通信,担当的角色可能不同,共同完成同一件事情的系统
状态特性
- 在大部分应用中都提倡服务无状态,分布式环境中的任何节点(Node)也是无状态的
- 无状态是指不保存存储状态,则可以随意重启和替代,便于做扩展。比如负载均衡服务器Nginx是无状态的,应用服务绝大部分也是无状态的,在高压力访问下,撑不住了就加一些机器,扩展很容易
系统重发和幂等性
- 网络重复请求,造成的原因有多种
- 幂等性就是调用1次和调用N次要返回一样的结果