一、操作系统
1. 操作系统定义
操作系统(Operating System)是直接控制和管理计算机硬件、软件资源,合理地对各类作业进行调度,以方便用户使用的程序集合。
1.1 操作系统的两个重要作用
- 通过资源管理提高计算机系统的效率;
- 改善人机界面用户提供友好的工作环境。
操作系统的4个特性:并发性,共享性,虚拟性和不确定性。
1.2 操作系统的五个功能
- 进程管理:计算机系统中处理机是最宝贵的系统资源,进程管理的目的是要合理地按最短时间,以保证多个作业能顺利完成并且尽量提高CPU的效率,使用户等待的时间最少。
- 文件管理:文件系统管理则是对软件资源的管理。为了管理庞大的系统软件资源及用户提供的程序和数据,操作系统将它们组织成文件的形式,操作系统对软件的管理实际上是对文件系统的管理。
- 存储管理:存储管理的主要工作是对内存储器进行合理分配、有效保护和扩充。
- 设备管理:当用户程序要使用外部设备时,设备管理控制驱动程序使外部设备工作,并随时对该设备进行监控,处理外部设备的中断请求等。
- 作业管理:为用户提供一个使用系统的良好环境,使用户能够有效地组织自己的工作流程,并使整个系统高效地运行。
1.3 操作系统的分类
- 批处理操作系统
- 分时操作系统
- 实时操作系统
- 网络操作系统
- 分布式操作系统
2. 进程和线程、协程的概念
2.1进程
进程(process)是计算机 中的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据以及组织形式的描述,进程是程序的实体。
它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
进程的概念主要有两点:
- 1.进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。
- 2.进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
进程状态:进程有三个状态,就绪,运行,阻塞。就绪状态其实就是获取了除CPU外的所有资源,只要处理器分配资源就可以马上执行;运行态就是获得了处理器的分配的资源,程序开始执行;阻塞态就是当程序条件不够的时候,需要等待条件满足时候才能执行,如等待I/O操作的时候,此刻的状态就叫做阻塞态。
2.2 线程
线程(Thread)是轻量级的进程,是程序执行流的最小单位。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可与同属一个进程的其他线程共享所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。线程间通信主要通过共享内存,上下文切换很快,资源开销很小,但相比进程不够稳定容易丢失数据。
线程是程序中一个单一的顺序控制流程。进程内一个相对独立的,可调度的执行单元,是系统独立调度和分派CPU的基本单位,指运行中的程序的调度单元。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
3.3 协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。
我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。
3. 多线程与多进程
3.1 多进程
操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注意,这里的多个线程是分属于不同进程的)。操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行.由于这多个线程分属于不同的进程,因此在我们看来,就好像是多个进程在同时执行,这样就实现了多任务。(并行性)
3.2 多线程
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做 出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据 传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。
4. 进程和线程、协程之间的比较
4.1 进程与线程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:
- 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
- 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
- 线程是处理器调度的基本单位,但进程不是
- 二者均可并发执行
- 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
4.2 协程和线程的区别
- 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU
- 线程进程都是同步机制,而协程则是异步
- 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
5. 进程和线程、协程在Python中的使用
- 多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上,当然生产者消费者这种也可以使用。多进程的优势就是一个子进程崩溃并不会影响其他子进程和主进程的运行,但缺点就是不能一次性启动太多进程,会严重影响系统的资源调度,特别是CPU使用率和负载。
- 多线程一般是使用threading库,完成一些IO密集型并发操作。多线程的优势是切换快,资源消耗低,但一个线程挂掉则会影响到所有线程,所以不够稳定。现实中使用线程池的场景会比较多。
- 协程一般是使用gevent库,当然这个库用起来比较麻烦,所以使用的并不是很多。相反,协程在tornado的运用就多得多了,使用协程让tornado做到单线程异步,据说还能解决C10K的问题。所以协程使用的地方最多的是在web应用上。
总结:IO密集型一般使用多线程或者多进程,CPU密集型一般使用多进程,强调非阻塞异步并发的一般都是使用协程,当然有时候也是需要多进程线程池结合的,或者是其他组合方式。
二、计算机网络
1. HTTP协议
1.1 什么是HTTP协议
HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文
HTTP:超文本传输协议。使用的是可靠的数据传输协议,在传输的过程中不会被损坏或产生混乱。HTTP可以从遍布全世界的Web服务器商将各种信息块迅速、便捷、可靠地搬移到人们桌面上的Web浏览器上去。
客户端向服务器端发出request请求,服务器端收到请求后,向客户端发出response响应,给出资源数据信息。
HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。
1.2 Web客户端是什么
Web客户端常见的又各大厂商的浏览器,比如微软的IE浏览器,google的chrome浏览器。
1.3 Web服务端是什么
客户端向服务器发送HTTP请求,服务器会在HTTP响应中回送所请求的数据。
1.4 什么是资源
Web资源寄宿在Web服务器上。所有能够提供Web内容的东西都是Web资源。比如静态文件,能够动态生成内容的软件程序。
1.5 GET方法和POST方法的区别
- GET方法是从服务器上获取资源,而POST方法是向服务器端发送数据;
- GET传输数据是通过URL请求,以field(字段)= value的形式,置于URL后;POST传输数据通过HTTP的POST机制,将字段与对应值封存在表单数据Form_Data中发送给服务器,这个过程对用户是不可见的;
- GET传输的数据量小,因为受URL长度限制,但效率较高;POST可以传输大量数据,所以上传文件时只能用POST方式;
- GET不安全,因为URL是可见的,会泄露隐私;而POST安全性较高,网站进行登录请求时常用的都是POST请求;
- GET方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。POST支持标准字符集,可以正确传递中文字符。
1.6 HTTP和HTTPS的区别
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
1.7 常见的HTTP相应状态码
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
1.8 Session和Cookie的区别
Cookie:位于用户的计算机上,用来维护用户计算机中的信息,直到用户删除。比如我们在网页上登录某个软件时输入用户名及密码时如果保存为cookie,则每次我们访问的时候就不需要登录网站了。我们可以在浏览器上保存任何文本,而且我们还可以随时随地的去阻止它或者删除。我们同样也可以禁用或者编辑cookie,但是有一点需要注意不要使用cookie来存储一些隐私数据,以防隐私泄露
Session:Session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求http地址时,将传递到web服务器上并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据,我们无法访问以及禁用网站
1.9 TCP的三次握手四次挥手
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers);
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
第一次挥手:客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送;
第二次挥手:服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号;
第三次挥手:服务器B关闭与客户端A的连接,发送一个FIN给客户端A;
第四次挥手:客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
2 TCP/IP协议
TCP/IP网络协议分为四层,从上至下依次是:
-
链路层
其实在链路层下面还有物理层, 指的是电信号的传输方式, 比如常见的双绞线网线, 光纤, 以及早期的同轴电缆等, 物理层的设计决定了电信号传输的带宽, 速率, 传输距离, 抗干扰性等等。在链路层本身, 主要负责将数据跟物理层交互, 常见工作包括网卡设备的驱动, 帧同步(检测什么信号算是一个新帧), 冲突检测(如果有冲突就自动重发), 数据差错校验等工作。
-
网络层
网络层的IP协议是构成Internet的基础。该层次负责将数据发送到对应的目标地址, 网络中有大量的路由器来负责做这个事情, 路由器往往会拆掉链路层和网络层对应的数据头部并重新封装。IP层不负责数据传输的可靠性, 传输的过程中数据可能会丢失, 需要由上层协议来保证这个事情。 -
传输层
网络层负责的是点到点的协议, 即只到某台主机, 传输层要负责端到端的协议, 即要到达某个进程。典型的协议有TCP/UDP两种协议, 其中TCP协议是一种面向连接的, 稳定可靠的协议, 会负责做数据的检测, 分拆和重新按照顺序组装, 自动重发等。而UDP就只负责将数据送到对应进程, 几乎没有任何逻辑, 也就是说需要应用层自己来保证数据传输的可靠性。‘
-
应用层
即我们常见的HTTP, FTP,SMTP协议等。