回顾
TCP/IP
应用层:将网络中的包转换成应用程序需要的数据
传输层:端口号/UDP/TCP
- 确认应答(核心)
- 超时重传(默认500ms)
- 连接管理(三次握手/四次挥手)
- 滑动窗口(快重传)
- 流量控制
- 拥塞控制(慢启动)
- 延迟应答
- 捎带应答
- 面向数据流(粘包半包问题)
- 异常情况处理
IP协议
MTU MSS关系
MTU(1500)=MSS+传输层头部大小+网络层的报头大小
操作系统
硬件组成:冯诺依曼体系结构/普林斯顿体系结构
CPU和输入设备/输出设备 不能直接交互,必须依靠中间的存储部分(内存)
内存 VS 磁盘
内存 | 磁盘 |
---|---|
读写速度:纳秒 | 读写速度:微秒 |
价格相对昂贵 | 价格相对便宜 |
数据不能持久化(重启后无) | 可以持久化 |
OS:管理
一个执行任务就是一个进程
注:可执行任务(.exe)不是进程
PID 进程号,是进程的身份ID,重启之后,进程号会改变(随机)
PCB(进程管理模块)(描述,组织)
管理类型:管理软件,管理硬件
职责管理:对外管理(用户部分),对内管理(内核)
进程:
是操作系统分配资源的最小单位
内核部分产生一个由双向链表组成的PCB(进程管理模块)
进程属性:
- PID(主键ID,身份标识)
- 状态信息(新建,就绪,运行,阻塞,终止)
- 优先级(优先级越高,CPU权重越大)
- 记账信息(记录进程运行次数,防止CPU资源分配不均)
- 一组指针(需要使用的资源)
- 上下文信息(当分配到CPU资源时,执行,没有CPU资源后,暂时保存当前状态,等待下一次执行,这个过程叫上下文)
程序运行:
并发:只有一个资源,轮流执行
从宏观的角度看是同时进行的,从微观角度看是轮流执行的
并行:所有的应用一起运行
从宏观和微观看都是同时进行的
内核态,用户态:
一般的操作系统(如Windows、Linux)对执行权限进行分级:用户态和内核态。
操作系统内核作为直接控制硬件设备的底层软件,权限最高,称为内核态
用户程序的权限最低,称为用户态
最早的并发编程是多进程并发编程
多个进程不能共享资源的
线程
线程:系统调度资源的最小单位
(对比:进程:是操作系统分配资源的最小单位)
线程是进程执行的最小单位,也是线程执行的实际单位
一个进程中最好包含一个线程,线程必须依附在进程当中
进程就好比工厂,线程就好比一个流水线
线程占用系统资源更少,时间更短
进程不可以共享资源,线程可以共享资源
线程可以共享的资源:
- 打开的文件
- 内存(使用new创建的对象)
线程不可共享的资源:
- 上下文
- 记账信息
- 状态
- 线程栈信息
- 优先级
注意:
线程的数量不是越多越好
当线程的数量达到某个合适的值是最好的,如果有大量的线程,会出现线程之间争抢和CPU的过度调度问题了,而CPU调度是需要消耗系统资源的
那多少线程是最好的?
- 要看具体的场景
- 密集计算的CPU任务,IO(文件读写)型任务,
- 计算型:线程的数量=CPU数量是最好的
- IO型:理论上,线程数量越多越好
进程 --> 线程(轻量级的进程)–> 协程(轻量级的线程)