【第三章:BAT等名企面试真题解析8讲】第12节:阿里面试真题解析之进程线程的区别
前言
我们都知道进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度的基本单位。线程自己基本上不拥有系统资源,但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。由于线程比进程更小,基本上不拥有系统资源,线程上下文切换比进程上下文切换要快得多,所以线程调度的开销就会小得多,从而可以显著提高系统资源的利用率和吞吐量。但是对于为什么线程上下文切换比进程要快以及进程线程上下文切换到底做了哪些事情大多数人并不是特别清楚。本节将结合阿里面试真题,对线程和进程的区别做一个总结。
进程
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程一般由程序,数据集合和进程控制块三部分组成。
线程
线程是操作系统调度的最小单位。一个进程可以包含多个线程,每个线程可以看做一个独立的逻辑流,线程也称为轻量级进程。在Linux下其实原本并没有线程的概念,线程和进程对于操作系统都是一样的调度,都有具有自己独立的task_struct(进程描述符),也都有自己独立的pid,但是线程可以共享同一内存地址空间、代码段、全局变量、同一打开文件集合等等。
进程切换的开销
开销分成两种:
1.直接开销
2.间接开销
直接开销:
- 切换页表全局目录
- 切换内核态堆栈
- 切换硬件上下文:寄存器当中的数据
- 刷新TLB
- 执行操作系统调度器的代码
间接开销:
间接开销指的是由于切换到一个新进程后,各种缓存对于新的进程而言未命中的概率非常大。进程如果跨CPU调度,那么之前的TLB、L1、L2、L3缓存因为运行的进程已经变了,缓存所带来的空间局部性和时间局部性的优势失效,当前缓存起来的代码、数
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
收割BAT:C++校招学习路线总结 文章被收录于专栏
<p> 《收割BAT:C++校招学习路线总结》,专刊共计17节。专刊分为五大主要内容,包括后台开发学习路线、简历制作,面试技巧、BAT等名企面试真题解析和工作学习常用工具。本专刊将介绍我在技术成长过程当中的经验,通关BAT的面试技巧,并结合亲身经历的面试真题由浅入深的讲解后台开发方向的重点问题,让你们的求职之路更加顺畅。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>