蒋豆芽的面试题专栏(15/操作系统之进程与线程)

  1. 协程是轻量级线程,轻量级表现在哪里?⭐⭐⭐⭐⭐

  2. 说说线程间通信的方式有哪些?⭐⭐⭐⭐⭐

  3. 说说线程同步方式有哪些?⭐⭐⭐⭐⭐

  4. 有了进程,为什么还要有线程?⭐⭐⭐⭐⭐

  5. 单核机器上写多线程程序,是否要考虑加锁,为什么?⭐⭐⭐⭐⭐

  6. 说说多线程和多进程的不同?⭐⭐⭐⭐⭐

  7. 简述互斥锁的机制,互斥锁与读写的区别?⭐⭐⭐⭐⭐

  8. 说说线程池的设计思路,线程池中线程的数量由什么确定?⭐⭐⭐

  9. 进程和线程相比,为什么慢?⭐⭐⭐⭐⭐

=========================================================================================================

  • 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。
  • 本专栏适合于互联网C++软件开发、嵌入式软件求职的学生或人士。
  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
  • 针对于非科班同学,建议学习本人专刊文章《蒋豆芽的秋招打怪之旅》,该专刊文章对每一个知识点进行了详细解析。
  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。

=========================================================================================================

  1. 协程是轻量级线程,轻量级表现在哪里?⭐⭐⭐⭐⭐

    1. 协程调用跟切换比线程效率高:协程执行效率极高。协程不需要多线程的锁机制,可以不加锁的访问全局变量,所以上下文的切换非常快。

    2. 协程占用内存少:执行协程只需要极少的栈内存(大概是4~5KB),而默认情况下,线程栈的大小为1MB。

    3. 切换开销更少:协程直接操作栈基本没有内核切换的开销,所以切换开销比线程少。

  2. 说说线程间通信的方式有哪些?⭐⭐⭐⭐⭐

    线程间的通信方式包括互斥量、信号量、条件变量、读写锁

    1. 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才可以访问。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
    2. 信号量:计数器,允许多个线程同时访问同一个资源。
    3. 条件变量:通过条件变量通知操作的方式来保持多线程同步。
    4. 读写锁:读写锁与互斥量类似。但互斥量要么是锁住状态,要么就是不加锁状态。读写锁一次只允许一个线程写,但允许一次多个线程读,这样效率就比互斥锁要高。
  3. 说说线程同步方式有哪些?⭐⭐⭐⭐⭐

    线程间的同步方式包括互斥锁、信号量、条件变量、读写锁

    1. 互斥锁:采用互斥对象机制,只有拥有互斥对象的线程才可以访问。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
    2. 信号量:计数器,允许多个线程同时访问同一个资源。
    3. 条件变量:通过条件变量通知操作的方式来保持多线程同步。
    4. 读写锁:读写锁与互斥量类似。但互斥量要么是锁住状态,要么就是不加锁状态。读写锁一次只允许一个线程写,但允许一次多个线程读,这样效率就比互斥锁要高。
  4. 有了进程,为什么还要有线程?⭐⭐⭐⭐⭐

    1. 原因

      进程在早期的多任务操作系统中

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

- 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,总结出了高频面试考点(附有答案)共计309道,事半功倍,为大家春秋招助力。 - 本专栏内容分为七章:共计309道高频面试题(附有答案)

全部评论
欢迎大家留意参与讨论哟
1 回复 分享
发布于 2021-03-15 23:51
3月17日晚十一点,豆芽再次优化改进了面试题的答案,优化到第15章,这里留个言。
点赞 回复 分享
发布于 2021-03-17 23:41
对于通信和同步,我更偏向说进程通信、线程同步。当然进程也需要同步,线程也会有通信。基于此,进程通信的手段有管道、消息队列、信号、信号集、共享内存、socket等;线程同步手段有互斥量、信号量、读写锁、条件变量。同步:多个相关进(线)程在执行顺序上的协调,使得并发按照一定时序共享系统资源,进而使得程序具有可再现性。
点赞 回复 分享
发布于 2021-04-27 10:33
对于线程同步:互斥量、信号量、读写锁、条件变量。(1)互斥量:mutex值只能取0或1,加锁lock(减1),解锁unlock(加1),对于临界区先加锁后解锁,相当于一个时刻只有一个线程能访问临界区。(2)信号量:是互斥量的加强版,资源个数n可以预设,加锁(sem_wait),解锁(sem_post),区别:信号量某一时刻最多n个线程访问临界区。(3)条件变量:目的是为了防止恶意竞争,与互斥量一起使用,互斥量失败后会一直尝试,与其这样,还不如让它去睡觉,当临界区可用才唤醒它(pthread_cond_signal)。(4)读写锁:写锁(pthread_rwlock_wrlock)权限高于读锁,有人在写,其他读和写全部阻塞;允许多个读(pthread_rwlock_rdlock),应用在读线程多的场景
点赞 回复 分享
发布于 2021-04-27 10:52
这里简要分享下:阻塞、睡眠、挂起的区别,因为不能随意描述。阻塞:是被动行为,因为访问临界资源或IO而不得,导致被动停止。睡眠和挂起都是主动的,如进程主动让某个线程睡眠(几分钟);挂起suspend后需要等待resume,如时间片用完就会执行挂起
点赞 回复 分享
发布于 2021-04-27 11:29

相关推荐

评论
2
3
分享

创作者周榜

更多
牛客网
牛客企业服务