后端面试基础——进程与线程

 刚刚经历了大学以来的第一次面试,不得不说头条作为宇宙厂面试有非常高的难度,平日进行的简单开发和底层的深入理解不可而与,为了更加透彻的理解进程与线程,这里特别对进程和线程相关的知识进行总结。并且利用准确的术语来表述进程和线程的特点以及关系。

一 进程的基本概念

 进程是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。作为一个程序执行的一个实体,是系统分配资源的基本单位。

 进程通信主要有五种通信方式,分别是管道、命名管道、信号量、消息队列、共享内存。

二 线程的基本概念

 线程是进程的一个执行单元,是进程的一个特定执行路径。当一个线程修改了进程的资源,同一个进程下的其他线程将会立即看到这种变化。

 相较于进程,由于线程共享进程中的全局变量,所以通常而言不需要特别的线程通信方式,在C/C++中我们常利用volatile关键词使编译器不对代码段进行优化,无需将该值放入寄存器中,使该值可以被外部改变。或者利用windows消息队列进行线程通信。此外还可以利用std中std::promise、std::packaged_task来进行线程通信。

三 进程和线程的主要区别及优势

区别:

1.代码段、内存:进程间相互独立,同一进程的各线程间共享。线程仅在同一个进程内可见。

2.通信:进程间通信IPC(管道、命名管道、信号量、共享内存、消息队列),线程间通信相对进程间通信更为简单,直接使用全局变量即可。但是使用时需要考虑锁机制和同步机制。

3.调度和切换:线程上下文切换比进程上下文切换快得多。

4.在多线程OS中,进程不是一个可执行的实体。

选择:

1.需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程的代价是很大的。

2.线程的切换速度快,所以在需要大量计算,切换频繁时使用线程,还有耗时的操作时用使用线程可提高应用程序的响应。

3.因为对CPU系统的效率使用上线程更占优势,所以可能要发展到多机分布的用进程,多核分布用线程。

4.并行操作时用线程,如C/S架构的服务器端并发线程响应用户的请求。

5.需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。

资源引用:什么是进程?什么是线程?进程和线程之间的区别是什么?

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×