1. 什么是协程
      1. 是微线程,在子程序内部执行,中断转而执行别的子程序再返回来接着执行
      2. 线程和协程的区别
        1. 协程执行效率极高。(因为基本没有内核切换的开销)
        2. 协程不需要多线程的锁机制,从属于一个线程,不存在冲突
        3. 一个线程可以有多个协程
      3. 协程的优势
        1. 协程调用跟切换比线程效率高
        2. 占用内存少
        3. 开销少
    2. 线程和进程的区别(面试真题)
      1. 一个进程可以包含多个线程,一个线程从属于一个进程
      2. 进程挂掉不会影响其他进程
      3. 进程是系统资源调度的最小单位;线程是CPU调度的最小单位
      4. 进程开销大
      5. 进程拥有独立内存单元
      6. 通信方式不一样
    3. 进程切换为什么比线程消耗更多资源
      1. 进程切换需要刷新TLB并获取新的地址空间
      2. 保存线程的上下文比进程的上下文小
    4. 介绍一下进程之间的通信
      1. 匿名管道
        1. 半双工,数据单向流动且只有亲缘关系(父子)的进程使用
      2. 有名管道
        1. 先进先出,不需要有亲缘关系
      3. 信号
        1. 可以在任意时刻发送给某一进程
      4. 消息队列
        1. 存放在内核中的消息链表
      5. 共享内存
      6. 信号量
        1. 解决进程和线程间并发执行的同步问题
        2. P操作(信号量值-1)和V(信号量值+1)操作
      7. socket
    5. 说说僵尸进程和孤儿进程
      1. 孤儿进程
        1. 一个父进程退出,它的一个或多个子进程还在运行
        2. 孤儿线程将被init进程收养,并完成状态收集
      2. 僵尸进程
        1. 一个进程使用fork创建子进程,子进程退出,父进程没有调用wait或waitpid,子进程的描述符仍保存在系统
    6. 介绍线程之间的通信方式
      1. 锁机制
      2. 信号量机制
        1. 无名线程信号量
        2. 命名线程信号量
    7. 进程的状态
    8. 进程之间共享内存的通信方式有什么好处
      1. 效率高
        1. 进程可以直接读写内存,不需要拷贝数据
    9. 如何杀死一个进程
      1. 杀死父进程并不会同时杀死子进程
      2. kill
      3. killall
    10. 说一说kill的命令
      1. 向操作系统内核发送一个信号,系统内核根据信号进行相应的操作
      2. kill知识发送一个信号,只有当信号被捕获的时候才会执行
    11. 介绍下你知道的锁
      1. 悲观锁
      2. 乐观锁
      3. 自旋锁
        1. 基础的同步原语,保障对共享数据的互斥访问
        2. 线程等待自旋锁的时候,CPU不能做任何事
      4. 公平锁
        1. 多个线程竞争一把锁,先到先得
      5. 非公平锁
      6. 共享锁
        1. 多个线程共享锁的拥有权
      7. 死锁
    12. 什么情况会产生死锁
      1. 互斥条件
        1. 即某个资源不能同时被两个或以上进程占有
      2. 不剥夺条件
        1. 进程获得的资源在未使用完毕前,不能强行夺取
      3. 请求和保持条件
        1. 进程至少已经占有一个资源,但又申请新的资源
      4. 循环等待条件
        1. 在等待序列中出现互相等待

    只要一个必要条件不满足,死锁就可以排出

    1. 说说对自旋锁的理解
      1. 定义
        1. 线程尝试获取锁的时候锁已被占用,线程会一直等待,间隔一段时间后会再次尝试获取
      2. 特点
        1. 用于临界区互斥
        2. 在任何时刻最多只能有一个执行单元获得锁
        3. 等待锁的线程进入忙循环
      3. 存在的问题
        1. 如果某线程持有锁的事件过长,会让等待的线程进入一直循环,消耗CPU
        2. 无法满足等待时间最长的线程优先获取锁
      4. 优点
        1. 不会使线程状态发生切换,减少不必要的上下文切换,执行速度快,性能好
      5. 与互斥锁的区别
        1. 互斥锁会让等待线程进入睡眠状态
    2. CAS在什么地方用到过吗?
      1. 定义
        1. 比较并替换 CompareAndSwap,
        2. 执行指令时,当且仅当内存地址V与预期值A相等,将V的值修改成B,否则什么都不做
      2. 场景
        1. 高并发环境下对同一个数据进行并发读(都读100)和并发写(一个写20,一个写30)导致的数据不一致问题
          1. 解决方案
            1. 在set写回的时候加上初始状态的条件Compare,只有不变时才允许写回
    3. 谈谈IO多路复用
      1. 是一种同步IO模型,实现一个线程可以监视多个文件句柄。多指网络连接,复用指同一个线程
      2. 三种实现方式
        1. select
        2. poll
        3. epoll
        4. 区别 | | 最大连接数 | FD剧增后的IO效率 | 消息传递方式 | | —- | —- | —- | —- | | select | 有FD_SETSIZE宏定义 | 线性下降 | 内核拷贝 | | poll | 没有限制 | 同上 | 同上 | | epoll | 有上限但很大 | 活跃socket较少时没有线性下降;活跃socket过多时会有性能问题 | 共享内存 |