1、socketTCP服务端socket-bind-listen-accept-recv-send-close客户端sokect-connect-send-closeUDP服务端socket-(recv-send)-close客户端socket-(send-recv)-close2、进程与线程从资源占有情况独立性开销、通信方式等方面介绍。资源进程是资源分配的基本单位拥有独立地址线程是CPU调度的最小单位线程不拥有资源共享所属进程的资源。开销创建进程需要系统分配内存、IO设备等资源线程不需要进程上下文切换开销大线程开销小。独立性进程独立性高一个进程崩溃不会引起其他进程崩溃而一个线程崩溃很有可能引起其他线程崩溃。通信线程通过共享内存实现进程包括管道、信号、消息队列、共享内存、信号量、套接字等。3、协程与线程从调度开销并行抢占等方面介绍调度线程由操作系统调度协程由程序员调度。开销线程切换涉及内核态切换和上下文保存和恢复协程在用户态完成切换仅保存少量寄存器信息开销极小。并行线程和进程一样是抢占式协程是协助式而非抢占式主动让出控制权线程是真正的并行协程是在主线程内分帧执行。异步等待时不用排队可以做其他事情进程线程都是同步协程是异步。4、Unity协程原理核心是一个状态机由IEnumerator迭代器实现自定义yield return暂停点达到条件后封存状态并返回主循环主循环每帧检测是否达成唤醒条件若达成则用MoveNext()返回协程上一次暂停点并执行。5、并行和并发的区别并发是一个时间段内可以同时进行多个任务可以同时进行也可以在时间上是​​交替执行​​但宏观看是同时执行并发包含并行并行是同一时刻执行多个任务得有多核CPU才能执行。6、进程和线程切换进程1、保存上下文信息CPU寄存器​​页表信息等放在PCB进程控制块切换页表切换完成后缓存的地址空间作废线程1、保存上下文信息CPU寄存器​​放在TCB线程控制块共同2、切换内核栈和上下文信息跳转执行。7、进程通信方式管道慢半双工。父子进程匿名管道单向命名管道进行容易进程通信双向信号不能传复杂数据只用于同步socket可用于不同机器慢共享内存速度快但要保持同步消息队列克服管道只能承载无格式字节流和缓冲区大小受限。8、进程的状态创建、就绪、运行、阻塞、终止9、分页分段分页和分段是操作系统实现虚拟内存的技术用于解决内存分配和管理的问题。分页将虚拟内存划分成固定大小的页通过页表实现虚拟地址对物理地址的映射。提高内存利用率优点1、减少外部碎片将不连续的物理内存变为连续2、提高内存利用率支持动态加载和换出。缺点1、增加内部碎片页面大小固定会有页内空间浪费2、页表有开销大地址空间需要多级页表。分段将进程划分为不同的逻辑段比如代码段数据段堆栈段等。动态链接数据共享与保护。优点1、逻辑清晰符合程序设计的结构2、实现不同地址不同的访问权限。缺点1、存在外部碎片分段大小不固定容易产生小的外部碎片2、换到磁盘时需交换整个段数据量大效率低。分页对程序员是透明的但是分段需要程序员显式划分每个段。分页的地址空间是一维地址空间分段是二维的。页的大小不可变段的大小可以动态改变。分页主要用于实现虚拟内存从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。交换空间换页时把页放在硬盘里所放的那块硬盘空间就是交换空间物理内存交换空间总的虚拟内存。物理地址实际存在的地址地址总线上的信号地址转换的最终目标逻辑地址、有效地址段内偏移地址线性地址、虚拟地址保护模式下的段基址段内偏移实模式已经是物理地址了虚拟内存的作用直接用物理内存有多不好1、当有多个程序来回切换时需要频繁的在物理内存和硬盘中换进换出效率非常低。2、大型程序物理内存可能放不下若有虚拟内存则可以放下。3、当malloc一块非常大的连续内存时物理内存更容易找不到连续的空间但有很多小的内存碎片无法使用虚拟内存则不太会出现这种情况。4、物理内存不限制访问并且各个进程没有独立的地址空间无法实现不同页面的不同访问权限进程可以互相修改别的进程数据。虚拟内存好1、可以加载部分资源而不是加载所有资源相当于扩展可用内存2、提供内存地址的隔离访问每个进程的地址空间都是独立的一个进程不能访问其他进程的地址3、物理地址可能不连续虚拟地址把物理地址变成对程序员来说是透明的所有地址都可看作是连续的。网络分层物理层设备中继器和集线器数据比特数据链路层将原始的比特流组织成帧使用MAC地址 48位6字节的硬件地址。循环冗余校验 (CRC, Cyclic Redundancy Check) 在帧尾添加FCS接收方计算CRC并与FCS比较以检测传输错误。注意数据链路层通常只检测错误不纠正错误纠错由上层如传输层负责。流量控制协调发送方和接收方的数据速率防止接收方被淹没如使用滑动窗口机制。介质访问控制 (MAC)决定多个设备如何共享同一物理媒介如以太网的CSMA/CDWi-Fi的CSMA/CA。网络层负责在不同的网络之间进行数据包的路由(Routing) 和转发(Forwarding)实现逻辑寻址和路径选择。IPv4是32位IPv6是128位设备路由器Router根据路由表 (Routing Table) 决定数据包从源到目的地的最佳路径。路由表可以通过静态配置或动态路由协议如RIP, OSPF, BGP生成。协议IP核心协议ICMP用于传递控制消息ARP将IP转为MAC地址RARP/DHCP将MAC转为IP地址IGMP传输层提供端到端End-to-End的、进程到进程Process-to-Process的数据传输服务TCP面向连接、可靠 的协议。提供有序、无差错的数据流传输。UDP 无连接、不可靠的协议。只提供基本的复用/分用和差错检测校验和。不保证送达、不保证顺序、不进行重传。应用层HTTP/HTTPS:​​ 网页浏览​​FTP:​​ 文件传输​​SMTP/POP3/IMAP:​​ 电子邮件​​DNS:​​ 域名解析​​SSH:​​ 安全远程登录内存访问1、原本知道的是虚拟地址查找TLB/快表存储页表和物理地址的映射得到对应的物理地址分为找到和没找到的情况若没找到要去遍历页表完整页表也叫慢表找虚拟地址并加入快表2、若找到了那根据这个顺序查找L1 Cache - L2 Cache - L3 Cache - 主内存。对应行会提升大致为内存-l3级-l2级-l1级。3、如果页表中没有触发缺页中断要到硬盘里取出来这里会有页面置换上面其他的不是标准的页面置换但也是类似的思想。线程同步以性能优先的话考虑无锁的原子操作、线程局部存储等再考虑读写锁这样的最后考虑互斥锁。在竞争频发时优先考虑互斥锁。互斥锁同一时间只有一个线程访问自旋锁请求时一直轮询检查用于使用时间极短的操作读写锁写时锁允许多个只读原子操作硬件实现的无锁操作信号量保证同时访问的数量不大于给定值条件变量满足条件才开始屏障when all线程局部存储每个线程独立拥有一份数据比如复制一份互斥锁Mutex最常见的同步机制保证同一时间只有一个线程访问共享资源。线程加锁后需解锁否则可能导致死锁。示例pthread_mutex_tPOSIX、std::mutexC。读写锁Read-Write Lock允许多个读线程同时访问共享资源但写线程独占资源。适用于读多写少的场景提高并发性能。示例pthread_rwlock_t、std::shared_mutex。条件变量Condition Variable允许线程在某个条件满足前阻塞等待并通过其他线程的信号唤醒。常与互斥锁配合使用避免忙等待。示例pthread_cond_t、std::condition_variable。信号量Semaphore通过计数器控制同时访问资源的线程数量可用于线程同步或限制并发数。二元信号量计数为1功能类似互斥锁。示例sem_tPOSIX、System.Threading.Semaphore.NET。屏障Barrier让一组线程在某个点同步等待直到所有线程都到达后才继续执行。常用于并行计算的分阶段处理。示例pthread_barrier_t、std::barrierC20。自旋锁Spinlock线程在获取锁时循环检查忙等待而不是阻塞休眠。适用于锁持有时间极短的场景减少上下文切换开销。注意可能浪费CPU资源。原子操作Atomic Operations通过硬件支持的原子指令如CAS实现无锁编程避免使用锁。适用于简单的共享变量操作如计数器。示例std::atomicC、java.util.concurrent.atomic。无锁数据结构Lock-Free Data Structures基于原子操作实现线程安全的数据结构如队列、栈避免锁带来的阻塞。设计复杂但能提高并发性能。线程局部存储Thread-Local Storage, TLS每个线程拥有变量的独立副本避免共享资源竞争。适用于线程独立的上下文如随机数生成器。示例thread_localC、ThreadLocalJava。消息传递Message Passing线程通过通信如队列交换数据而非直接共享内存。典型应用Actor模型、Go的channel、生产者-消费者模式。原码补码反码原码第一位符号位后面是绝对值正数都一样负数反码是符号位不变后面取反补码在反码基础上1。补码让减法变为加法。CPU大端小端大端是高地址在前面小端是低地址在前面大端符合人类阅读习惯早期架构和当前的网络都是大端其他都变为小端了小端- 便于类型转换当需要将32位整数强制转换为16位整数时在小端机上只需读取前两个字节低地址即可因为那里本来就存储着低位数据。- 便于算术运算加法、乘法等运算通常从低位开始小端模式能让CPU更早地获取到低位字节进行计算。