多线程面试题

1、程序什么时候应该使用线程,什么时候单线程效率高

单线程
  • 处理短时间启动频率高的问题,提高程序效率
多线程
  • 处理响应时间要求高,提高响应速度
  • 某操作容许并发且可能出现阻塞问题,提高并发性

但需要复杂的技巧将程序碎片化。

2、惊群现象

        多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群效应。

        消耗:Linux 内核对用户进程(线程)频繁地做无效的调度、上下文切换等使系统性能大打折扣。上下文切换(context switch)过高会导致 CPU 像个搬运工,频繁地在寄存器和运行队列之间奔波,更多的时间花在了进程(线程)切换,而不是在真正工作的进程(线程)上面。

3、C++函数内的静态变量初始化以及线程安全问题

4、C++线程安全的单例类

5、多线程环境带有状态的对象的讨论

6、C++多线程加volatile的错误认识

7、并行编程中多进程和多线程,什么情况下多进程能解决的多线程无法解决

8、如何证明一个数据结构是线程安全的

9、lock-free的实现方式

10、锁的实现方式

11、多线程编程的时候,使用无锁结构会不会比有锁结构更加快

12、linux线程是如何进行切换的

13、Linux 开发,使用多线程还是用 IO 复用 select/epoll

14、异步,多线程和并行的区别

15、Linux 下多线程和多进程程序的优缺点,各自适合什么样的业务场景

16、开发多线程的程序应该注意哪些问题

17、如何测试线程池的性能

19、如何理解互斥锁,条件锁,读写锁以及自旋锁

20、互斥锁,同步锁,临界区,互斥量,信号量,自旋锁之间联系是什么

21、pthread_cond_wait 为什么需要传递 mutex 参数

22、多线程网络编程中如何合理地选择线程数

23、malloc和free是线程安全的吗,在多线程开发时用这两个函数应该注意什么

25、Linux系统中 进程 、线程 、时间片的关系

26、在Linux系统中,对于用户创建的进程(线程)来说,CPU分配时间片的单位是线程还是进程

27、内核级调度和用户级调度

28、Linux中进程具有父子层次结构,Windows中没有进程层次,这两种设计各有什么优劣

32、进程的内存空间布局

34、进程空间和内核空间对内存的管理不同

35、虚拟内存的作用

虚拟内存是一种计算机系统中的一种技术,用于扩展系统的内存容量。首先,它可以提供更大的内存空间供应用程序使用,因为硬盘的存储容量通常比RAM大得多。当RAM不足以容纳所有运行的程序和数据时,虚拟内存可以通过将部分数据移动到硬盘上,释放RAM空间供其他程序使用,从而避免了内存不足的问题。

其次,虚拟内存还可以提高内存的命中率。命中率是指系统从内存中读取数据的速度与从硬盘中读取数据的速度之间的比例。由于硬盘的读写速度相对较慢,所以频繁访问硬盘会导致系统性能下降。虚拟内存可以将一些不常用的数据移到硬盘上,从而使RAM中存储的数据更加频繁地命中,提高系统的整体性能。

此外,虚拟内存还可以在系统内存不足时提供一种“后备力量”,保证系统的稳定性。当物理内存不够用时,虚拟内存可以暂时替代物理内存,使系统能够继续正常运行。这对于一些内存需求较大的软件,如图像处理软件、游戏等,尤为重要。

虚拟内存的作用主要包括扩展内存容量、提高内存命中率和保证系统稳定性

36、虚拟内存的实现

37、Linux的slab层

38、fork与vfork区别

39、exit()与_exit()区别

40、Linux是如何避免内存碎片的

41、共享内存的实现原理

42、银行家算法

笔试计算题类总计_专业刷题Pia的博客-CSDN博客

43、linux中断响应机制

44、如何实现守护进程

45、32位系统一个进程最多有多少堆内存

46、线程安全和不安全的讨论

47、可重入函数与线程安全的区别与联系

48、双重检查锁定模式(DCLP)的风险

49、内存屏障详解

50、原子操作原理

51、Linux有内核级线程么

线程有两种类型:“用户级线程”和“内核级线程”。 用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。

内核级线程需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销。

用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因 I/O 而处于等待状态时整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;

内核线程没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。
Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程
 

52、使用线程是如何防止出现大的波峰

如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队等候。

55、读者-写者问题

经典进程同步问题(三)——读者写者问题_苏劫的博客-CSDN博客

56、哲学家进餐问题

【操作系统】“哲学家进餐”问题_哲学家就餐问题算法_diligentyang的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值