线程面试高频问题

1 什么是进程,什么是线程?

进程

只要是程序进入内存中,那么就是一个进程,一个程序可以有多个进程,例如我登录两个qq号,都是启动了一个QQ.exe的程序;进程是用来分配资源, 网络,磁盘,最主要的是内存资源; 它是一个静态的概念,当程序进入内存后,一定会产生一个主线程;

线程

通过进程可以知道,线程是依赖于进程的,进程可以看作是线程中的多个计算单元,它是一个动态的概念,做计算;所以cpu需要在多个线程直接来回切换做计算,也就是利用时间分片处理;
线程没有内存,多个线程之间都是共享进程的内存,线程直接只共享内存空间,不共享计算结果;

2 单核cpu的时间分片执行有意义嘛?

例如我一个进程中有两个线程,第一个执行需要5s,第二个执行也需要5s
1 不分片执行 分别执行 一共10s;
2 分片执行, 由于两个任务都会有任务等待情况,例如io 网络等,那么两个任务的 计算时长都为3s, 所以利用时间分片执行,至少需要6s,因为这里会有切换线程,上下文的时间,但是肯定比10s要少很多,这就是分片执行的意义;
答案是: 有意义

3 是不是线程数量越多,执行效率越高?

答案是否定的;
由于多线程的执行,cpu是利用时间分片执行,那么也就是意味着每次切换线程都需要浪费保存上下文,以及下次执行的计算时间,如果线程数量设置的不合理过多,会导致大量的时间浪费在切换上下文上

4 项目中如何界定线程池的大小

参考我之前发的一篇文章: 实际项目中线程池大小应该如何界定

你可能感兴趣的:(杂七杂八,面试,linux,职场和发展)