整理字节腾讯阿里等数百份大厂面经:C++高并发多线程和线程安全最高频面试题及参考答案

目录

C++ 中的多进程通信方式有哪些?

进程和线程有何区别?

进程间通信方式有哪些?你最常用的是哪种,具体如何实现?

进程切换过程中会发生什么?

进程的空间是如何划分的?分配内存的过程是怎样的?

C++ 中的多进程和多线程的区别是什么?

多进程和多线程的使用场景有哪些?

线程优势有哪些?

线程共享哪些资源?

C++ 如何创建一个线程?线程的数量可以无限创建吗?最多能创建多少?

C++ 多线程对全局变量的读写,如果一个全局变量大部分是读,很少修改,有什么优化方式?

C++ 中的线程池原理是什么?如何实现?

C++ 中的线程池如何处理不同的任务(不只是处理 http 请求)?

C++ 中的线程具体设计有哪些要点?

C++ 中的多线程有哪些缺点?

C++ 多线程中,不加锁的话会有什么后果?

C++ 项目中如何实现高并发?

C++ 项目中如何去定位死锁?

C++ 项目中线程池如何处理不同的任务,不只是处理 http 请求?

C++ 项目中请求队列满了高并发如何解决?

线程与进程共享哪些资源?线程在切换时需要保存什么?

说说线程同步。

shared_ptr 是否线程安全?

多线程使用 shared_ptr 如何保护数据安全?

协程为什么比线程快?

何时用协程,何时用线程?给出具体例子,为什么在这些场景要使用协程?

协程任务队列是怎么设计的,数据结构是什么(链表)?

所有线程都访问同一个协程任务队列的并发导致锁的颗粒度比较大,如何解决(可以给每个线程分配单独的协程任务队列)?

各线程单独的协程任务队列协程数量不均匀怎么办

协程是怎么实现的?

用到的信号量和互斥锁是线程的还是协程的?

用互斥锁,一个协程拥有资源,占用锁后,切换出去,新协程请求不到资源,陷入锁的阻塞队列,无法切出,怎么办?

自旋锁只适合短时间拥有锁,长时间会导致 CPU 空转,还有其他方法吗?

循环引用计数的最终值是多少?

epoll 相对于 select 和 poll 的改进是什么?

C++ 项目中 select 和 epoll 的区别是什么?如果 5000 个客户端连接进来,调用 select 会怎样?会报错吗还是咋?

共享内存的实现方式有哪几种?

共享内存锁相关原理及实现。


C++ 中的多进程通信方式有哪些?

在 C++ 中,常见的多进程通信方式有以下几种:

管道(Pipe)

管道是一种半双工的通信方式,它主要用于具有亲缘关系的进程之间通信,比如父子进程。其原理是在内核中开辟一块缓冲区,一个进程向这块缓冲区写入数据,另一个进程则从缓冲区读取数据。

在实现上,通过pipe系统调用创建管道,会返回两个文件描述符,一个用于读操作,一个用于写操作。例如,父进程利用fork函数创建子进程后,子进程会继承父进程打开的文件描述符。父进程可以往写文件描述符写入数据,像要传递一些简单的文本信息或者数字等,子进程便能从对应的读文件描述符读取到这些数据。不过管道通信的数据格式是字节流形式,没有特定结构,所以如果要传递复杂的数据结构,还需要自行进行序列化和反序列化等操作。而且管道通信有一定的局限性,比如当写端关闭时,读端读取完缓冲区数据后再读就会返回文件结束标志;当读端关闭时,写端继续写入数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型大数据攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值