多线程是面试必问的知识点,多多少少都会有人掉进面试官挖的坑中。
1.说一下什么是进程?
进程是资源分配的的基本单位,启动一个程序就是一个进程。每个进程都有彼此独立的地址空间,不同的进程之间无法访问彼此的数据。但是可以通过通道,文件,套接字等进行访问
2.不同进程中哪些资源可以共享
-
堆】由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
-
全局变量】全局定义的变量单位,因此也是共享的
-
局部静态变量】虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的
-
文件等公用资源】这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。
3.说一下什么是线程?
进程的最小单位,一个进程包含多个线程,当关闭进程时线程也会相应被关闭。
举例:
一个浏览器就相当于一个线程,每个tab页是一个进程。关闭浏览器之后每个网页也会被关闭。
需要频繁销毁创建的使用线程,因为进程的销毁和创建需要消耗大量的资源,需要保证程序稳定安全,推荐使用进程。需要加快执行速度选用线程。
4.说一下什么是并行?
同一时间节点,多个任务同时进行。比如洗澡的时候可以唱歌,多核CPU,多个进程可以运行在不同的物理核心上。每个CPU各司其职执行不同的任务。
5.说一下什么是并发?
一段段时间内,多个任务交替执行,类似多线程。单核cpu,某一时刻只能一个进程执行。但是可以通过不断切换的方式(如时间片轮巡),因为cpu执行速度非常快,所以我们看起来好像是同时进行,实际上是快速交替执行
========================================================================================================================================================