架构师必备基础二
主要内容是:一些名词的解释
一、名词解释
1、吞吐率:WEB服务器单位时间内处理的请求数。
2、最大并发用户数和最大并发连接数的本质区别?
- 当实际并发用户数稍稍大于服务器所能维护的文件描述符上线时,如果请求的性质决定了处理每个请求花费的时间非常少,比如请求1KB的静态网页,那么每个请求都可以快速处理然后释放文件描述符,这样从用户的角度而言,等待时间几乎不会较少太多。所以在这种情况下,我们希望服务的最大并发用户数可以大于最大并发连接数。
- 如果请求决定了处理每个请求要花费相当长的时间,比如下载10MB文件或者请求动态内容,那么即使服务器可以支持较大的并发连接数,比如使用异步IO理论上可能支持2万个并发连接,对于下载10MB文件来说,可能由于宽带的瓜分而导致每个用户下载速度缓慢。而对于请求动态内容,由于可能CPU的时间瓜分导致每个用户的等待时间过长。所有在这种情况下我们希望服务的最大并发用户数小于理论上的最大并发连接数。
3、进程的概念
进程是由内核调度,从内核的观点看,进程的目的就是担当分配系统资源的实体。同时进程也可以理解为记录程序实例当前运行到什么程度的一组数据,多个进程通过不同的进程描述符与这些数据进行关联。
每个进程都有自己独立的内存地址和生命周期。当子进程被父进程创建后便将父进程地址空间的所有数据复制到自己的地址空间,完全继承父进程的所有上下文信息,他们之间可以通信,但是互不依赖。它的创建有fork()系统调用,代价很大。
为此Linux 2.0之后,提供了对轻量级进程的支持,它由一个新的系统调用clone(),并由内核直接管理,像普通进程一样独立存在,各自拥有进程描述符,但是这些进程允许共享一些资源,比如地址空间、打开文件等。轻量级进程减少了内存的开销,并为多进程应用程序的数据共享提供了直接支持,但是上下文切换的开销还是在所难免。
引入线程的概念:从内核的角度来看,多线程只是一个普通的进程,他是由用户态通过一些库函数模拟实现的多执行流,所以多线程的管理完全在用户态完成,这种实现方式下线程切换的开销相比于进程和轻量级进程都要少些,但是它在多处理的服务器中表现较差,因为只有内核的进程调度器才有权分配多个CPU的时间。
POSIX线程另外一种实现,它可以说是内核级线程库,因为它通过clone()来创建线程,也就是说他的实现原理是将线程和轻量级进程一对一关联,每个线程实际上就是一个轻量级进程,这样使得线程完全由内核进程调度器来管理。
4、进程调度器
内核中的进程调度器维护着各种状态的进程队列,进程调度器维护着一个包括所有可运行进程的队列,称之为运行队列,以及一个包括所有休眠进程和僵尸进程列表。
它的一项重要的责任就是决定下一个运行的进程,如果运行的进程不只一个进程,所以引入了进程的优先级。进程的优先级除了可以由线程自己决定外,进程调度器在进程运行时也可以动态调整他们的优先级,比如对有些进程适当提高优先级,对有些进程进行处罚,降低他们的优先级,这些行为的出发点都是为了让所有进程更好地重叠系统资源。Linux可以使用命令:nice,pr表示进程调度器给进程的时间片长度,单位是时钟个数,一个时钟是多长时间这跟CPU主频和操作系统平台有关,比如Linux PR 15表示150ms。
5、系统负载
[root@SJSWT44-66 renren-profile]# cat /proc/loadavg
0.00 0.00 0.00 1/380 4647
1/380 1代表运行队列中的进程个数,而380表示此时进程的总数。
前面三个值表示1、5、15分钟得出的系统负载,0.0说明任何进程可以马上获得CPU,不需要等待。
6、进程的切换
上下文切换?
进程拥有自己独立的内存空间,但是每个进程都只能共享CPU寄存器。一个进程被挂起的本质就是将它的CPU寄存器的数据拿出来暂存在内核态堆栈中,而一个进程恢复工作的本质就是将它的数据重新装入CPU寄存器,这段装入和移除的数据就是硬件上下文除此之外进程上下文还包含了进程运行时需要的一切状态信息。
7、IOWait和锁竞争
分享到:
相关推荐
### C语言基础必备第二版——核心知识点解析 #### 一、基本概念 ##### 1-1 声明法则 **声明与定义的区别** - **声明**: 仅描述对象的类型,用来指代其他地方已定义的对象。可以多次出现在程序的不同部分。 - **...
### Java基础入门教程+Android必备基础 #### 一、Java语言简介 Java 是一种广泛使用的高级编程语言,最初由 Sun Microsystems 开发并于 1995 年发布。它的设计理念是为了适应互联网的需求,具备跨平台运行的能力。...
Java初学者必备基础教材主要涵盖了Java语言的核心概念和基本元素,是学习编程的入门路径。以下将详细解析这些知识点: 1. **Java语言与面向对象的程序设计**:Java是一种面向对象的语言,这意味着它强调通过类和...
电子工程师必备基础知识手册(二)电容.pdf 电子工程师必备基础知识手册(八)功率晶体管.pdf 电子工程师必备基础知识手册(六)继电器.pdf 电子工程师必备基础知识手册(十)电子基本概念.pdf 电子工程师必备基础...
Struts2是一个强大的Java web应用程序开发...综上所述,"struts2必备基础jar包"包含了Struts2框架运行所必需的库,通过这些库,开发者可以轻松构建基于Struts2的应用程序,实现高效的业务逻辑处理和优雅的视图展示。
【资源说明】技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计.zip技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计.zip技术面试必备基础知识、Leetcode、计算机操作...
### Java基础必备知识 #### 一、基础语法 在学习Java之前,首先需要了解Java的发展历程,这有助于我们更好地理解其设计理念。接着是搭建开发环境并编写第一个程序——HelloWorld,以此来熟悉Java的基本语法。 - *...
标题"WINCE必备基础包NETCF3.5"指的是Windows CE(Windows Embedded Compact)操作系统上的一个核心组件,即.NET Compact Framework 3.5。这是一个专为小型设备和嵌入式系统设计的.NET框架版本,它允许开发者使用C#...
本文档是一份关于技术面试中必备的基础知识的内容,重点关注网络、多线程、并发以及内存模型等关键概念,为准备进入互联网行业的求职者提供了重要的知识点储备。这些知识点不仅在面试中经常被提及,也是软件开发与...
网络必备基础知识主要涵盖了网络传输、交换机、VLAN与Trunk、路由、链路聚合、IP地址与子网、TCP/IP协议栈、Linux网络配置、诊断工具、网络性能监测与分析、网络协议原理等多个方面。下面对这些知识点进行详细说明:...
### 运维必备Python基础入门到精通 #### Python语言简介 Python是一种面向对象、解释型的计算机程序设计语言,以其简洁清晰的语法和强大的类库而闻名。它被广泛应用于各种场景,包括Web开发、数据分析、人工智能等...
1 电子工程师必备基础知识手册(二):电容.pdf
"易语言基础课程 课程四课 各内重点讲解 小白必备"这套教程显然是针对易语言初学者设计的,通过四个课程帮助学员掌握易语言的基础知识和核心技能。 在描述中提到,“这四课都是半懂 和不懂人学习必备”,这意味着这...
电工必备基础知识 电工必备基础知识是电工行业的基础知识,涵盖了电工技术的方方面面。以下是电工必备基础知识的要点: 一、变压器知识 * 变压器在运行中,变压器各相电流不应超过额定电流;最大不平衡电流不得...
电子工程师必备基础知识手册(二)电容.pdf 电子工程师必备基础知识手册(八)功率晶体管.pdf 电子工程师必备基础知识手册(六)继电器.pdf 电子工程师必备基础知识手册(十)电子基本概念.pdf 电子工程师必备基础...
### 软件设计基础——从事软件开发设计必备的基础知识 #### 第一章:JAVA语言简介 ##### 1.1 Java简介 Java 是一种广泛使用的编程语言,它由 Sun Microsystems 公司于 1995 年推出,并迅速成为全球最流行的编程...
分享 技术面试必备基础知识、Leetcode 题解、Java、C++、Python、后端面试、操作系统、计算机网络、系统设计分享 技术面试必备基础知识、Leetcode 题解、Java、C++、Python、后端面试、操作系统、计算机网络、系统...
### 电子工程师必备基础知识 在电子工程领域,掌握一定的基础知识对于单片机的学习与应用至关重要。本文将基于提供的部分信息,深入解析其中所涉及的重要知识点,并进行详细的阐述。 #### 单片机基础知识 单片机...
在准备国家计算机二级等级考试,特别是C语言部分时,公共基础知识是考生必须掌握的重要领域。这一部分涵盖了计算机科学的基础概念、..."二级C公共基础知识必备"的资料将涵盖这些内容,帮助考生扎实基础,顺利通过考试。