后端与并发 | 青训营笔记

36 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第10天

进程的空间模型 ⭐⭐⭐⭐****

  1. 内核区:用户代码不可见的区域,页表就存放在这个区域中。
  2. 用户区:
    a、代码段:只可读,不可写,程序代码段。
    b、数据段:保存全局变量,静态变量的区域。

常量存储区
c、堆区:就是动态内存,通过malloc,new申请内存,有一个堆指针,可以通过brk系统调用调整堆指针。
d、文件映射区域:通过mmap系统调用,如动态库,共享内存等映射物理空间的内存区域。可以单独释放,不会产生内存碎片。
e、栈区:用于维护函数调用的上下文空间,用ulimit -s 查看。一般默认为8M。


1. 进程线程的状态转换图 什么时候阻塞,什么时候就绪 ⭐⭐⭐


2. 父进程、子进程的关系以及区别 ⭐⭐⭐⭐****

写时复制****

共享文件表项****

3. 什么是进程上下文、中断上下文 ⭐⭐****

中断上下文切换,并不需要保存和恢复进程的虚拟内存等用户态资源,只需要处理 CPU 寄存器、内核堆栈等内核态的资源即可。 ****


4. 一个进程可以创建多少线程,和什么有关 ⭐⭐****

一个进程可以创建的线程数由可用虚拟空间和线程的栈的大小共同决定****




1.2.1 什么是线程同步和互斥 ⭐⭐⭐⭐⭐****

1.2.2 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗? ⭐⭐⭐⭐****

1.2.3 并发,同步,异步,互斥,阻塞,非阻塞的理解 ⭐⭐⭐⭐⭐****

缓冲与⾮缓冲 I/O :是否利⽤标准库缓冲****

直接与⾮直接 I/O :否利⽤操作系统的缓存,存在内核缓存****

同步: ****

阻塞与⾮阻塞 I/O ****

当⽤户程序执⾏ read ,线程会被阻塞,⼀直等到内核数据准备好****

⾮阻塞的 read 请求在数据未准备好的情况下⽴即返回,可以继续往下执⾏,此时应⽤程序不断轮询内核,直到数据准备好****

异步: ****

当我们发起 aio_read 之后,就⽴即返回,内核⾃动将数据从内核空间拷⻉到应⽤程序空间,这个拷⻉过程同样是异步的,内核⾃动完成的****

⽆论是阻塞 I/O 、⾮阻塞 I/O ,还是基于⾮阻塞 I/O 的多路复⽤都是同步调⽤。因为它们在 read 调⽤时,内核将数据从内核空间拷⻉到应⽤程序空间,过程都是需要等待的,这两个动作执行过程,进程都会阻塞。 ****

作者:用户5191486070407
链接:juejin.cn/post/719779…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。