最后
由于篇幅原因,就不多做展示了
===========================================================================================
-
进程是系统资源分配的最小单元。线程是CPU调度的最小单元。
-
一个 进程至少包含一个线程,可以包含多个线程。这些线程共享这个进程的资源。
-
每个线程都拥有独立的运行栈和程序计数器,线程切换开销小。
-
多进程指的是操作系统同时运行多个程序,如当前操作系统中同时运行着QQ、IE、微信等程序。
-
多线程指的是同一进程中同时运行多个线程,如迅雷运行时,可以开启多个线程,同时进行多个文件的下载。
2.并行(Parallel)、并发(Concurrent)与多线程(Multithreading)
====================================================================================================================
-
并行是指多个任务在同一时刻进行。并发是指多个任务在同一时间段内发生。
-
并行是物理上的同时发生,而并发是逻辑上的同时发生。
-
体现在程序上: 并行是指多个CPU内核在同一时刻,同时运行多个任务。并发是指单个CPU内,通过CPU调度算法,让用户感觉在同时运行多个任务。
-
更形象的说法: 并行是指两队人员同时使用两台咖啡机。并发是指两队人员交替使用同一台咖啡机。—-Erlang 之父 Joe Armstrong。
-
多线程即多个线程,一般只多个同时在运行的单线程。
-
如果是在单核CPU上,多线程肯定是并发运行的。如果是在多核CPU上,这些多线程也可能是并行运行。
=========================================================================
线程安全,指的是在并发的情况之下,线程的调度顺序不影响运行结果。
如不加锁控制的转账操作,在单线程运行中是安全的,但是在多线程环境中,肯定是不安全的。
这里只给出示例,具体逻辑就没不解释了。
void transferMoney(User from, User to, float amount){
to.setMoney(to.getBalance() + amount);
from.setMoney(from.getBalance() - amount);
}
=======================================================================
死锁是指两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。
例如,
-
如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了。
-
线程1永远得不到B,线程2也永远得不到A,并且它们永远也不会知道发生了这样的事情。
-
为了得到彼此的对象(A和B),它们将永远阻塞下去。这种情况就是一个死锁。
=========================================================================
5.1.资源利用率高
假定场景:需要从本地读取和处理两个文件,读取一个文件需要5秒,处理一个文件需要2秒。
单线程:
5秒读取文件A
2秒处理文件A
5秒读取文件B
2秒处理文件B
总共需要14秒
多线程:
惊喜
最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)
解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**