|
| 1 | +## 操作系统里的内存碎片怎么理解? |
| 2 | + |
| 3 | +内存碎片通常分为内部碎片和外部碎片: |
| 4 | + |
| 5 | +1. 内部碎片是由于采用固定大小的内存分区,当一个进程不能完全使用分给它的固定内存区域时就会产生内部碎片。通常内部碎片难以完全避免 |
| 6 | +2. 外部碎片是由于某些未分配的连续内存区域太小,以至于不能满足任意进程的内存分配请求,从而不能被进程利用的内存区域。 |
| 7 | + |
| 8 | +## 有什么解决办法? |
| 9 | + |
| 10 | +现在普遍采取的内存分配方式是段页式内存分配。将内存分为不同的段,再将每一段分成固定大小的页。通过页表机制,使段内的页可以不必连续处于同一内存区域。 |
| 11 | + |
| 12 | +## 操作系统的四个特性? |
| 13 | + |
| 14 | +并发:同一段时间内多个程序执行(与并行区分,并行指的是同一时刻有多个事件,多处理器系统可以使程序并行执行) |
| 15 | + |
| 16 | +共享:系统中的资源可以被内存中多个并发执行的进线程共同使用 |
| 17 | + |
| 18 | +虚拟:通过分时复用(如分时系统)以及空分复用(如虚拟内存)技术把一个物理实体虚拟为多个 |
| 19 | + |
| 20 | +异步:系统进程用一种走走停停的方式执行,(并不是一下子走完),进程什么时候以怎样的速度向前推进是不可预知的 |
| 21 | + |
| 22 | +## 多线程相较单线程的好处 |
| 23 | + |
| 24 | +1、并发提升程序执行效率 |
| 25 | + |
| 26 | +2、提升CPU利用率,访存的时候可以切换线程来执行 |
| 27 | + |
| 28 | +3、更快的响应速度,可以有专门的线程来监听用户请求和专门的线程来处理请求。比如监听线程和工作线程是两个线程,这样监听就负责监听,工作的就负责工作,监听到用户请求马上把请求转到工作线程去处理,监听线程继续监听 |
| 29 | + |
| 30 | +## 什么是协程? |
| 31 | + |
| 32 | +协程是一种用户态的轻量级线程。 |
| 33 | + |
| 34 | +协程不是由操作系统内核管理,而是完全由用户程序所控制,这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。 |
| 35 | + |
| 36 | +协程可以理解为可以暂停执行的函数。它拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。 |
| 37 | + |
| 38 | +## 线程和协程有什么区别呢? |
| 39 | + |
| 40 | +1、线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。 |
| 41 | +2、线程是协程的资源。协程通过 可以关联任意线程或线程池的执行器(Interceptor)来间接使用线程的资源的。 |
0 commit comments