一、进程和线程
进程:进程是指系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。
线程:一个进程要想执行任务必须要有线程(每个进程至少要有一个线程)、线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行(多线程共享内存)。
比如打开网易云音乐是启动了一个进程,播放音乐是线程。
线程的串行:一个线程中的任务的执行时串行的,如果要在一个线程中执行多个任务,那么只能一个个按顺序执行这些任务,即在同一时间内,一个线程只能执行一个任务。
二、多线程
多线程:一个进程可以开启多条线程,每条线程可以并行(同时)执行不同的任务,多线程技术可以提高程序的执行效率。
多线程原理:同一时间,CPU只能处理1条线程,只有一条线程在工作(执行),多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换),如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。(缺点:CPU在N多条线程之间调度,CPU会累死,消耗大量的CPU资源,每条线程被调度执行的频次会降低(线程的执行效率降低))。
多线程优点:能适当提高程序的执行效率,能适当提高CPU利用率。
多线程缺点:开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量线程,会占用大量的内存空间,降低程序的性能。线程越多,CPU在调度线程上的开销就越大,程序设计越复杂,比如线程之间的通信、多线程的数据共享。
多线程的安全隐患:资源共享
1块资源可能会被多个线程共享,也就是多个线程可能会访问同一资源,比如多线程访问同一个对象、同一个变量、同一个文件、当多线程访问同一资源时,很容易引发数据错乱和数据安全问题。例如银行存取钱,车站售票。
解决方案:互斥锁
当多条线程抢夺同一块资源可以使用互斥锁,互斥锁能有效防止因多线程抢占资源造成的数据安全问题,但需要消耗大量的CPU资源。互斥锁是利用线程同步技术,多条线程按顺序执行任务。