【面试练习题】线程相关:来自《后台开发技术应用实践》 + 其他

【1】线程的状态:默认为非绑定、非分离、1MB大小的堆栈(ubuntu 2.6的内核线程栈的默认大小为8M),与父进程具有同样的优先级

 

【2】等待线程——pthread_join

  • 功能:阻塞等待,知道子线程结束运行,然后得到子线程退出码,回收子线程的资源。

  • 如果不使用pthread_join回收线程,可能会导致类似僵尸进程一样的问题,导致内存泄漏。

 

【3】线程分离——pthread_detach

  • 默认情况下,线程是非分离态(结合态)

  • 如果不关心线程的退出时的状态,可以将之设置为分离态这种情况下,线程终止时能够自动清除资源

  • 使用detach会让线程在后台运行

 

【4】多线程同步:

  • 互斥锁

  • 读写锁(

读写锁非常适合对数据读的次数比写的次数多。

三种状态:

1. 当资源加上了写锁之后,所有试图对资源加锁的线程都被阻塞;

2.  读模式加锁时,如果线程是读加锁则成功,如果线程是写加锁会阻塞。

3. 读锁、写锁并行阻塞时,写锁优先级高,即解锁后优先执行写锁操作

  • 条件变量(互斥量是线程程序必需的工具,但并非是万能的。例如,如果线程正在等待共享数据内某个条件出现,那会发生什么呢?它可能重复对互斥对象锁定和解锁,每次都会检查C++共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。)

  • 信号量

  • 屏障(

屏障允许任意线程等待,直到所有线程完成屏障前的处理工作,然后所有线程再开始屏障之后的工作;

比如pthread_join就是一种屏障,需要一个线程等待另一个线程终止

 

【5】线程并行方式

  • 任务并行(把一个任务拆分成多个子任务,分工协作)

  • 数据并行(比如大数处理的时候,可以使用数据并行,需要用到屏障进行同步)

 

【6】多线程模型

  • master - worker

  • fork - join(大数据处理比如)

  • 生产者 - 消费者(lis比如)

  • future模型和actor模型不了解

https://www.cnblogs.com/PerkinsZhu/p/7570775.html

另一种解释:内核线程和用户线程之间的关系:

  • 一对多(不支持多核CPU)

  • 一对多

  • 多对多

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值