高并发指南

在这里插入图片描述

什么是进程

概念:

进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。
显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进
程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态
下的操作系统本身;用户进程就是所有由你启动的进程。进程是操作系统进行资源分
配的单位。

状态

1.新建:

	进程正在被创建生成

2.运行:

	进程正在被执行

3.等待:

	进程正在等待某个事物发生

4.就绪:

	进程不是等待状态(因为所有需要的事务已经发生过了),但是还没有来得及被
	分配处理器,而没有被执行的状态

5.终止:

	进程已经执行完毕

控制块

1.进程状态:

	标志进程的活动状态,如上文提到的新建、就绪和运行等

2.程序计数器:

	表示进程要执行的下一条指令的地址

3.CPU寄存器:

	储存这个进程在累加器、索引寄存器、通用寄存器等里的寄存器信息。在进程中
	断时,就需要保存在寄存器里的数据。通常计算机体系和指令集不同,寄存器的
	具体数量、种类也不同。

4.CPU调度信息:

	包括优先级、调度队列指针等,以及其他调度的参考数据。

5.内存管理信息:

	包括所分配的内存区域的基址界限、页段和页表等等。

6.记账信息:

	包括进程使用CPU和其他数据的执行记录等

7.IO状态信息:

	分配给进程的IO设备表、文件操作表等等。

什么是线程

概念:

通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源,在引入线
程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行
和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调
度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。

属性

轻型实体:

	线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行
	的资源,比如,在每个线程中都应具有一个用于控制线程运行的线程控制块TCB,
	用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地
	址等的一组寄存器和堆栈。

独立调度和分派的基本单位:

	在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本
	单位。由于线程很“轻”,故线程的切换非常迅速且开销小。

可并发执行:

	在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程
	都能并发执行;同样,不同进程中的线程也能并发执行。

共享进程资源:

	在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所
	有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该
	地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时
	器、信号量机构等。

状态:

1.新建:

	新创建了一个线程对象

2.就绪:

	线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态
	的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权

3.运行:

	可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。

4.阻塞:

	阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂
	时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu
	timeslice 转到运行(running)状态。阻塞的情况分三种:
等待阻塞:
		运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队
		列(waitting queue)中。
同步阻塞:
		运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线
		程占用,则JVM会把该线程放入锁池(lock pool)中。
其他阻塞:
		运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或
		者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、
		join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行
		(runnable)状态。

5.死亡:

	线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生
	命周期。死亡的线程不可再次复生。

高并发

定义:

高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计
保证系统能够同时并行处理很多请求。

常用指标:

1.响应时间:

	系统对事件的时间。例如系统处理一个socket请求需要50ms,这个50ms就是系统
	的响应时间。

2.吞吐量:

	单位时间内处理的请求数量。

3.QPS:

	每秒响应请求数。

4.并发用户数:

	同时承载正常使用系统功能的用户数量。

如何提升系统的并发能力

垂直扩展

1.增强单机硬件性能:

	例如:升级网卡,升阶硬盘等。

2.提升单机架构性能:

	例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使
	用无锁数据结构来减少响应时间。

水平扩展

1.反向代理层的水平扩展:

	反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配
	置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。
	当nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加
	一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。

2.站点层的水平扩展:

	站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多
	个web后端。
	当web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在
	nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限
	高并发。

3服务层的水平扩展:

	服务层的水平扩展,是通过“服务连接池”实现的。
	站点层通过RPC-client调用下游的服务层RPC-server时,RPC-client中的连接池
	会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,
	新增服务部署,在RPC-client处建立新的下游服务连接,就能扩展服务层性
	能,做到理论上的无限高并发。如果需要优雅的进行服务层自动扩容,这里可
	能需要配置中心里服务自动发现功能的支持。

4数据层的水平扩展:

	在数据量很大的情况下,数据层(缓存,数据库)涉及数据的水平扩展,将原
	本存储在一台服务器上的数据(缓存,数据库)水平拆分到不同服务器上去,
	以达到扩充系统性能的目的。 欢迎使用Markdown编辑器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值