8.8内容整理和概述
今日内容概要
内容目录
- socket套接字
- 操作系统的发展史
- 多道技术
- 进程
socket套接字
基于文件类型的套接字家族:
套接字家族的名字:AF_UNIX
基于网络类型的套接字家族:
套接字家族的名字:AF_INET
方法:
1.socket():创建一个socket对象
参数:
1.type:默认为socket.SOCK_STREAM(TCP协议),socket.SOCK_DGRAM为UDP协议
2.bind((访问地址,端口号)):绑定一个固定的地址(ip\port)
3.listen(个数):半连接池
4.accept():开始工作,会返回双向通道,客户端地址
5.send(数据):朝客户端发送数据
6.recv(接收的数据最大字节数):接收客户端发送的数据
7.sock.close():断链接
8.socket对象.close():关机
9.connect((访问地址,端口号)):连接服务端(拼接服务端的ip和port)
10..recvfrom(接收的数据最大字节数):接收客户端发送的数据,返回数据,以及服务端的ip和port(元组)
11.sendto(数据,地址):朝客户端发送数据
TCP协议:
注意:
1.服务端频繁重启可能会报端口被占用的错(主要针对mac电脑)
from socket import SOL_SOCKET,SO_REUSEADDR
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #就是它,在bind前加
2.客户端异常退出会发送空消息(针对mac linux)
针对接收的消息加判断处理即可
UDP协议:
1.服务端不需要考虑客户端是否异常退出
2.UDP不存在黏包问题(UDP多用于短消息的交互)
操作系统的发展史
1.穿孔卡片
CPU利用率非常的低,一人一卡一机模式
2.联机批处理系统
多人卡合在一起录入,提升CPU利用率
3.脱机批处理系统
远程利用CPU,是现代计算机的雏形,提升CPU利用率
总结:
操作系统的发展史也可以看成是CPU利用率提升的发展史
多道技术
前提:一个单核CPU
单道技术:所有的程序排队执行,总耗时是所有程序耗时之和
多道技术:
概述:计算机利用空闲时间提前准备好一些数据,提高效率,总耗时较短
概括:切换+保存状态
切换:CPU在两种情况下会切换(去执行其他程序)
1.程序自身进入IO操作
2.程序长时间占用CPU
保存:每次切换之前要记录下当前执行的状态,之后切回来基于当前状态继续执行
IO操作:
1.输入输出操作
2.获取用户输入
3.time.sleep()
4.读取,保存文件
进程
程序:一堆躺在文件上的死代码
进程:正在被运行的程序(活的)
进程调度算法演变:
1.先来先服务算法:
谁先来先调谁,针对耗时比较短的程序不友好
2.短作业优先调度:
先调短的程序,针对耗时比较长的程序不友好
3.时间片轮转法+多级反馈队列
1.先平分时间给所有进程
2.多次分配后,进程持续越长分配的时间额度越多,优先级越低
并行:多个进程同时执行(等单位的CPU)
并发:单cpu做到类似多个进程同时执行的效果
进程的三状态:(就绪,阻塞,运行)
1.所有的进程要想被运行,必须先经过就绪态
2.运行过程中如果出现了IO操作,则进入阻塞态
3.运行过程中如果时间片用完,则继续进入就绪态
4.阻塞态要想进入运行态必须先经过就绪态
"进程的提交状态"
同步:提交完任务之后原地等待任务的结果,期间不做任何事
异步:提交完任务之后不原地等待直接去做其他事,结果自动提醒
"进程的执行状态"
阻塞:阻塞态
非阻塞:就绪态 运行态
同步阻塞
同步非阻塞
异步阻塞
异步非阻塞