less,but diff
epoll_overview
epoll 前世今生 IO多路复用 从阻塞IO到异步IO的过程 一切的开始,都起源于这个 read 函数是操作系统提供的,而且是阻塞的,我们叫它 阻塞 IO。 为了破这个局,程序员在用户态通过多线程来防止主线程卡死。 后来操作系统发现这个需求比较大,于是在操作系统层面提供了非阻塞的 read 函数,这样程序员就可以在一个线程内完成多个文件描述符的读取,这就是 非阻塞 IO。 但多个文件描述符的读取就需要遍历,当高并发场景越来越多时,用户态遍历的文件描述符也越来越多,相当于在 while 循环里进行了越来越多的系统调用。 后来操作系统又发现这个场景需求量较大,于是又在操作系统层面提供了这样的遍历文件描述符的机制,这就是 IO 多路复用。 多路复用有三个函数,最开始是 select,然后又发明了 poll 解决了 select 文件描述符的限制,然后又发明了 epoll 解决 select 的三个不足。
epoll的函数接口 epoll如何实现IO多路复用
很好的blog: https://www.cnblogs.com/bandaoyu/p/16752516.html…
Read more ⟶macos编译安装ffmpeg
#brew 安装依赖项 brew update brew install automake cmake frei0r git libass libtool libvorbis libvpx opus sdl2 theora x264 x265 yasm #编译选项 # ffmpeg 4.4 sudo ./configure --prefix=/usr/local/ \ --enable-gpl \ --enable-nonfree \ --enable-postproc \ --enable-libass \ --enable-libfdk-aac \ --enable-libfreetype \ --enable-libopenjpeg \ --enable-openssl \ --enable-libopus \ --enable-libspeex \ --enable-libvorbis \ --enable-libvpx \ --enable-libx264 \ --enable-librtmp \ --enable-pthreads \ --disable-static \ --enable-shared make -j8 && sudo make install …
Read more ⟶TCP概述(了解TCP协议及其工作原理)
来自自己实现redis的挑战中:TCP: An Overview。感觉写的简洁明了,很适合用于了解tcp/ip
TCP是一种广泛使用的网络协议。它是一个运行在“不可靠”协议(IP,Internet 协议的缩写)的“可靠”的协议。(后面会解释为什么ip不可靠,tcp协议可靠)。
让我们深入了解TCP的工作原理。
我们先来看看 IP(互联网协议的简称),它是 TCP 的基础协议。
IP - 互联网的邮政服务 当程序使用 IP 在网络上发送数据时,数据会被分割成多个 “数据包 “发送。
每个数据包包含
报头部分 数据部分 标头包含源地址和目的地地址,就像通过本地邮政服务发送的信封一样。
IP 与邮政服务的重要相似之处在于,数据包不能保证到达目的地。虽然我们会尽一切努力将数据包送到目的地,但有时数据包会在传输过程中丢失。
此外,如果您同时发送 5 个数据包,也不能保证它们会在同一时间或以相同的顺序到达目的地。
所以当你使用IP协议传输数据时,数据包可能会丢失,也可能不按顺序传送,因为 IP 是一种尽力而为的协议,这意味着它不保证数据包的传送或顺序。
TCP 的出现就是为了解决 IP 的这些局限性。
TCP的保证 TCP 主要提供两种保证:(a) 可靠的数据包传送和 (b) 有序的数据包传送。
保证 #1–可靠传输 TCP 可确保数据包在传输过程中不会丢失。为此,它要求接收方确认所有发送的数据包,如果没有收到确认,则重新传输任何数据包。
保证 #2–有序递送 除了保证数据包到达目的地外,TCP 还保证数据包按顺序传送。为此,它为每个数据包标上一个顺序号。接收方会跟踪这些编号,并对不按顺序的数据包重新排序。如果数据包丢失,接收方会等待重新传输。
TCP 使用序列号来保持正确的数据传输顺序,并在目的地重新组装数据包。
TCP 链接 TCP 是一种面向连接的协议,这意味着要通过 TCP 进行交互,程序必须首先 “建立连接”。为此,一个程序扮演 “服务器 “的角色,另一个程序扮演 “客户端 “的角色。
服务器等待连接,客户端启动连接。连接建立后,客户端和服务器都可以接收和发送数据(这是一个双向通道)。
TCP 是一种双向通信协议,即客户端和服务器都可以发送和接收数据。
TCP 连接使用四个值的唯一组合来识别:
目标 IP 地址 目标端口号 源 IP 地址 源端口号 例如,假设您正在连接 google.…
Read more ⟶网页工具&知识收集
常用网页收藏列
TOOLS 🛠 注册账号-接受短信sms 编程工具-quick_benchmark 编程工具-gdb 调试支持stl打印 文件传输-奶牛快传,不同设备间传输 办公日常-ppt模版 上网工具-获取域名ip地址 地图工具-架空地图 shell工具-Parallel并行工具 AI工具-prompts 画图工具-excalidraw 随意画工具,风格好,可以用于解释说明 AI工具-跟PDF交谈 编程工具-vmtouch linux page cache概念工具 画图工具-dbdiagram 做数据库关系图 shell工具-shell check 编程工具-cpp 在线编译 翻译工具-沉浸式翻译 图书工具-制作ebook NEWS & READ 💡 READ-zlibrary私人域名 KNOWLEDGE 📖 性能优化-Linux Performance justscu 开发日常使用介绍和代码轮子 …
Read more ⟶Modern c++01
缘起 🐮🍺 purecpp社区的qicosmos来公司做了一次c++分享,关于现代C++的一些性能优化。 很有收获,遂想基于此边做整理边学习一下。
C++性能优化 💭 性能分析工具perf C++内存优化:小内存优化 用C++语言特性优化 右值引用:零拷贝 智能指针 function 线程和锁 unordered_map 并行算法 编译期计算 元编程 静态检查 静态探测 类型萃取 类型擦除 接口泛化与统一 …
Read more ⟶My First Post
hello hugo 📭 搭建博客的简单记录:
hugo 搭建博客教程:quick_start plan 🗒 想写一些文字,关于生活,技术和书籍。 想记录一些自己的感悟啥的。 all in one 我在很多地方会记录一些东西,最终输出整理到这里。 写作工具 emoji-cheat-sheet picgo 配置教程:picgo docs excalidraw 简单好用的画图工具 other 安装picgo的时候,mac的系统版本太高,不给打开非认证用户的软件,找到一个很不错的命令,记录下: sudo spctl --master-disable sudo xattr -r -d com.apple.quarantine /Applications/xxxx.app …
Read more ⟶