
Linux
文章平均质量分 97
恋喵大鲤鱼
一条不止于编码的鱼。
展开
-
一文读懂 Linux 网络 IO 模型
线程是运行在进程中的一个“逻辑流”,单进程中可以运行多个线程,同一个进程里的线程可以共享进程的部分资源,比如地址空间(代码段、数据段和堆等)、文件描述符列表、共享库等,这些共享些资源在上下文切换时是不需要切换,而只需要切换线程的私有数据,比如寄存器、栈等不共享的数据,因此同一个进程下的线程上下文切换的开销要比进程小得多。epoll 监听的 Socket 数量越多,效率不会大幅度降低,能够同时监听的 Socket 的数目非常的多,上限为系统定义的进程打开的最大文件描述符个数。原创 2023-11-21 21:01:58 · 670 阅读 · 1 评论 -
一文读懂 Linux mmap 内存映射
mmap(memory map)即内存映射,用于将一个文件或设备映射到进程的地址空间,或者创建匿名的内存映射。请注意,虽然 mmap() 最初是为映射文件而设计的,但它实际上是一个通用映射工具。它可用于将任何适当的对象(例如内存、文件、设备等)映射到进程的地址空间。以文件映射到内存为例,实现这样的映射后,进程虚拟地址空间中一段内存地址将与文件磁盘地址一一对应,进程就可以采用指针的方式读写这段内存,系统会自动回写脏页到对应的磁盘文件。原创 2023-11-20 15:03:43 · 2783 阅读 · 2 评论 -
一文读懂 Linux epoll 实现原理
epoll 是 Linux 平台下的一种特有的 IO 多路复用的实现方式,与传统的 select/poll 相比,epoll 在性能上有很大的提升。本文主要讲解 epoll 的实现原理。原创 2022-10-20 20:06:02 · 2222 阅读 · 0 评论 -
Linux 进程虚拟地址空间布局
虚拟地址空间(Virtual Address Space)是每一个程序被加载运行起来后,操作系统为进程分配的虚拟内存,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程所能访问的最大的虚拟地址空间由计算机的硬件平台决定,具体地说是由 CPU 的位数决定的。比如 32 位的 CPU 决定了虚拟地址空间的大小为 0 -2322^{32}232-1,即 0x00000000 - 0xFFFFFFFF,也就是我们常说的 4 GB 虚拟内存空间。原创 2015-05-09 01:36:54 · 13447 阅读 · 4 评论