1.进程和线程的区别
类别 | 组成 |
---|---|
进程 | 1.数据段 2.程序段 3.进程控制块PCB |
线程 | 1.寄存器 2.堆. 3.栈 |
进程切换为什么比线程切换开销大
这是由于进程切换的时候需要切换页表,导致TLB失效,所以此时会比较慢,但线程切换不需要
进程间的通信方式
管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket
最快的是共享内存
2.死锁的四个条件
1.互斥条件:一个资源每次只能被一个进程使用。
2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3.不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
3.协程
协程被称为用户态线程,让进程自己来创建对应的线程,来做到并发,关键思想在于控制流和退出
多线程并发控制的手段
手段 | 特点 |
---|---|
互斥锁 | 一个线程获取到互斥锁后,其他线程就无法访问该资源,直到该线程释放锁为止。 |
读写锁 | 读写锁允许多个线程同时读取共享资源,但是只允许一个线程写入共享资源。读写锁适用于读多写少的情况,可以提高程序的并发性能 |
条件变量 | 条件变量用于在多个线程之间传递信号 |
信号量 | 信号量是一种通用的同步原语,用于管理多个线程之间的共享资源。通过信号量,可以实现多个线程之间的同步和互斥 |
无锁编程 | 无锁编程是一种高效的并发编程技术,通过使用 CAS(Compare and Swap)等原子操作来实现对共享资源的访问。与锁相比,无锁编程能够避免锁带来的性能损失和死锁等问题,但需要更加复杂的编程技术。 |