
00:00:00
外卖卷:非常划算 扫码领劵 省点小钱钱
文章发布较早,内容可能过时,阅读注意甄别。
打个比方:
你正在用电脑看电影(一个进程),同时打开了 Word 文档在写东西(另一个进程),这两个任务互不干扰。
电影播放器这个“工厂”里,一个“工人”(线程 A)负责解码视频,另一个“工人”(线程 B)负责解码音频,还有一个“工人”(线程 C)负责显示字幕。它们共享电影播放器的内存空间和 CPU 时间,共同完成电影播放这个任务。如果解码视频的线程卡住了,整个电影可能就会卡住。
总结:进程是资源分配的基本单位,线程是 CPU 调度的基本单位。一个进程可以包含多个线程,但一个线程只能属于一个进程。
进程就像不同的工厂,它们各自独立。但有时候,不同的工厂之间需要互相协作,交换信息,比如工厂 A 生产了半成品,需要交给工厂 B 继续加工。那么,它们之间怎么“打电话”或者“寄快递”呢?
这些“打电话”或“寄快递”的方式就是进程间通信(IPC)。
|(管道符),比如 ls -l | grep .txt,就是把 ls -l 的输出作为 grep 的输入。Ctrl+C 终止程序就是发送一个信号。总结:选哪种方式取决于需求:速度要求高用共享内存,需要远程通信用套接字,简单通知用信号,有序通信用消息队列等。
你的电脑 CPU 就像一个“总经理”,而每个进程(工厂)都是一个“项目”。总经理手里有很多项目(进程)等着处理,但他只有一个大脑,不能同时做所有事。那么,他得有个“排班表”或者“工作优先级”来决定先处理哪个项目,后处理哪个,以及每个项目处理多久。这个“排班表”和“优先级”的规则,就是进程调度算法。
调度算法的目标通常是:
常见的调度算法有:
总结:调度算法就像 CPU 这个“总经理”在管理他手头一大堆任务的策略。没有哪个算法是万能的,现代操作系统通常会结合多种算法,形成一套复杂的调度策略,以应对不同类型的任务和系统需求。
I/O(Input/Output)就是输入/输出,比如读写文件,或者网络数据的发送和接收。I/O 模型就是应用程序(你的程序)和操作系统(管家)之间,处理数据输入输出时,采取的不同“沟通方式”或“协作模式”。
想象一下你要去饭店吃饭(I/O 操作),有几种不同的模式:
read()、write()),在数据未准备好时都会阻塞。select、poll、epoll、kqueue等。SIGIO信号。aio_read()/aio_write()等。但 Linux 下的异步 I/O 发展相对滞后,应用不如 Windows 广泛,通常所说的异步是指 I/O 多路复用。总结:随着 I/O 模型的发展,我们希望程序在等待 I/O 数据时能做更多的事情,从而提高系统的并发能力和响应速度。
这三者都是 I/O 多路复用的具体实现,就像都是“总服务员”,但他们的工作方式和效率有所不同。
想象你是一个班主任,要检查班上同学的作业(socket)。
Select:
Poll:
Epoll:
总结表格:
| 特性 | Select | Poll | Epoll |
|---|---|---|---|
| 工作模式 | 轮询(遍历整个 fd 集合) | 轮询(遍历整个 fd 集合) | 事件驱动(只返回就绪的 fd) |
| fd 上限 | 默认 1024 (FD_SETSIZE) | 理论无上限 (受内存限制) | 理论无上限 (受内存限制) |
| 效率 | 低 (O(N) 随 fd 数量线性增长) | 低 (O(N) 随 fd 数量线性增长) | 高 (O(1) 无论 fd 数量多少,只关心就绪的) |
| 内核/用户态数据拷贝 | 每次调用都拷贝整个 fd 集合 | 每次调用都拷贝整个 fd 集合 | 只拷贝一次监听的 fd,返回时只拷贝就绪的 fd |
| 触发方式 | 水平触发 (LT) | 水平触发 (LT) | 水平触发 (LT) 和 边缘触发 (ET) |
| 兼容性 | 跨平台,最老 | 跨平台,比 Select 新 | Linux 特有 |
网络 I/O 被阻塞,就像你打电话给一个朋友(发起网络请求)。
1. 建立连接阶段的阻塞(connect()):
connect()),但朋友的电话可能占线、或者没信号、或者没人接。你就会一直举着手机等着,直到电话通了或者挂断(连接建立成功或失败)。connect() 操作需要经历 TCP 三次握手,这是一个耗时过程。在握手完成之前,系统会一直等待,导致程序阻塞。2. 数据读写阶段的阻塞(read()/write()):
write()):你要给朋友发微信消息(write()),但你朋友的网络信号不好,或者微信服务器忙。你的消息发出去后,操作系统(管家)会帮你把消息放到一个发送缓冲区里,然后尝试发出去。如果缓冲区满了,或者网络非常拥堵,消息发不出去,你就会等着,直到消息能发出去或者缓冲区有空位。 read()):你在等朋友给你发消息(read())。如果朋友没发,或者网络有延迟,你就会干等着,直到有新消息来。 根本原因:
read()、write()、connect()这些系统调用是阻塞的。这意味着当它们被调用时,如果它们所依赖的事件(数据到达、缓冲区有空间、连接建立)没有立即发生,调用它们的进程就会被暂停,直到事件发生。如何避免阻塞?
就是前面提到的 I/O 模型:
通过这些方式,我们可以让程序在等待网络 I/O 的时候,不再原地踏步,而是能去处理其他任务,从而提高程序的并发能力。
在操作系统中,CPU 有不同的权限级别,主要分为:
为什么要分两种态?
出于安全和稳定性考虑:
切换场景:
read(),操作系统会切换到内核态完成硬盘访问。send/recv 会从用户态进入内核态操作网卡。所以 用户态 → 内核态 是通过 系统调用(System Call)实现的。
Reactor 模式是一种事件驱动的并发处理模型,常用于高性能网络编程(比如 Netty、Nginx)。
核心思想:
一个线程监听事件,来了事件就“分发”给对应的处理器去处理。
而不是传统的“一连接一个线程”,避免线程过多导致资源浪费。
结构组成:
类比生活:
虚拟内存(Virtual Memory)是操作系统用来抽象和管理物理内存的一种机制。
核心目标:
0x0000 开始,互不干扰,提升安全性。工作原理:
好处:
文件和目录管理:
ls:列出目录内容 (ls -l, ls -a, ls -lh)cd:切换目录 (cd /var/log, cd .., cd ~)pwd:显示当前工作目录mkdir:创建目录 (mkdir my_project, mkdir -p /path/to/new/dir)rmdir:删除空目录cp:复制文件或目录 (cp file1 file2, cp -r dir1 dir2)mv:移动或重命名文件/目录 (mv oldname newname, mv file1 /path/to/dir)rm:删除文件或目录 (rm file.txt, rm -rf my_dir) 慎用 rm -rffind:在文件系统中查找文件 (find . -name "*.log", find / -type f -size +1G)locate:快速查找文件 (基于数据库,需要 updatedb)查看文件内容:
cat:查看文件全部内容 (cat /etc/passwd)less:分页查看文件内容 (支持搜索和滚动,更适合大文件)more:类似于 less,但功能较少head:查看文件开头几行 (head -n 10 file.txt)tail:查看文件末尾几行 (tail -n 10 file.txt, tail -f /var/log/syslog 用于实时监控日志)grep:在文件中搜索文本模式 (grep "error" /var/log/messages, ls -l | grep ".conf")系统信息和进程管理:
ps:显示当前进程快照 (ps aux, ps -ef)top:实时查看系统进程、CPU、内存使用情况htop:类似于 top,但提供更友好的交互界面和更多功能kill:终止进程 (kill PID, kill -9 PID 强制终止)free:显示内存使用情况df:显示磁盘空间使用情况 (df -h)du:显示文件或目录的磁盘使用量 (du -sh /var/log)uname:显示系统信息 (uname -a)uptime:显示系统运行时间、用户数和平均负载history:显示历史命令sudo:以超级用户权限执行命令网络工具:
ping:测试网络连通性ip addr 或 ifconfig (旧版): 显示网络接口信息netstat (旧版) 或 ss (新版): 显示网络连接、路由表等ssh:远程登录到其他服务器scp:安全复制文件到远程服务器wget 或 curl:下载文件或与 Web 服务交互文件权限和所有权:
chmod:修改文件或目录权限 (chmod 755 script.sh)chown:修改文件或目录所有者 (chown user:group file.txt)压缩与解压:
tar:打包和解包文件 (tar -czvf archive.tar.gz dir, tar -xzvf archive.tar.gz)gzip, gunzip:压缩和解压文件zip, unzip:压缩和解压文件分段和分页是两种主要的内存管理技术,用于将程序的逻辑地址空间映射到物理内存地址空间。它们的目的是为了解决内存碎片问题,并提供多任务环境下的内存保护和共享。
分段(Segmentation)
分页(Paging)
区别总结
中断是操作系统处理外部事件和设备请求的核心机制。它允许 CPU 暂停当前任务,转而去处理更紧急或重要的事件,处理完毕后再返回原任务。中断可以分为硬中断和软中断。
硬中断(Hardware Interrupt)
软中断(Software Interrupt)
int 指令)或系统调用产生。syscall。对比总结
评论