ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

高并发指南

2021-12-21 16:33:55  阅读:85  来源: 互联网

标签:指南 扩展 并发 线程 进程 执行 运行


在这里插入图片描述

什么是进程

概念

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

状态

新建

	进程正在被创建生成

运行

	进程正在被执行

等待

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

就绪

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

终止

	进程已经执行完毕

控制块

进程状态

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

程序计数器

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

CPU寄存器

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

CPU调度信息

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

内存管理信息

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

记账信息

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

IO状态信息

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

什么是线程

概念

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

属性

轻型实体

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

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

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

可并发执行

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

共享进程资源

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

状态

新建

	新创建了一个线程对象

就绪

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

运行

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

阻塞

	阻塞状态是指线程因为某种原因放弃了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)状态。

死亡

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

高并发

定义

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

常用指标

响应时间

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

吞吐量

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

QPS

	每秒响应请求数。

并发用户数

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

如何提升系统的并发能力

垂直扩展

增强单机硬件性能,

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

提升单机架构性能

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

水平扩展

反向代理层的水平扩展

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

站点层的水平扩展

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

服务层的水平扩展

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

数据层的水平扩展

	在数据量很大的情况下,数据层(缓存,数据库)涉及数据的水平扩展,将原
	本存储在一台服务器上的数据(缓存,数据库)水平拆分到不同服务器上去,
	以达到扩充系统性能的目的。 欢迎使用Markdown编辑器

标签:指南,扩展,并发,线程,进程,执行,运行
来源: https://blog.csdn.net/weixin_38515565/article/details/122056351

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有