一、进程
要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在。
1.1 进程
打开任务管理器我们就看到了进程的存在。而通过观察,我们发现只有运行的程序才会出现进程。
进程:就是正在运行的程序。进程是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。
即每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内(比如同时打开QQ、Xcode,系统就会启动2个进程);
1.2 多进程的意义
单进程的计算机只能做一件事情,而我们现在的计算机都可以做多件事情。
举例:一边玩游戏(游戏进程),一边听音乐(音乐进程)。也就是说现在的计算机都是支持多进程的,可以在一个时间段内执行多个任务。 并且呢,可以提高CPU的使用率。
二、线程
2.1 线程
在同一个进程内又可以执行多个任务,而这每一个任务我们就可以看做是一个线程。
线程:是程序的执行单元,执行路径。是程序使用CPU的最基本单位。1个进程由一个或多个线程组成(每1个进程至少要有 1 条线程);线程是进程的基本执行单元,一个进程的所有任务都在线程中执行(比如使用酷狗播放音乐、使用迅雷下载电影,都需要在线程中执行)
单线程:程序只有一条执行路径。
多线程:程序有多条执行路径。
2.2 多线程的意义
多线程的存在,不是提高程序的执行速度。其实是为了提高应用程序的使用率。程序的执行其实都是在抢CPU的资源,CPU的执行权。 多个进程是在抢这个资源,而其中的某一个进程如果执行路径比较多,就会有更高的几率抢到CPU的执行权。我们是不敢保证哪一个线程能够在哪个时刻抢到,所以线程的执行有随机性。
2.3 多线程的原理
同一时间,cpu只能处理一条线程,只有一条线程在工作。多线程并发执行其实cpu快速的在多个线程直接调度(切换)。如果cpu调度的时间足够快,就造成了多线程并发执行的假象。如果线程非常多,cpu在n个线程之间切换,消耗大量的CPU资源。每条线程被调度执行的次数会降低,导致线程的执行效率降低。
2.4 多线程的优点和缺点
优点:能适当提供程序的执行效率,能适当提高资源的利用率(cpu ,内存利用率)。线程是上的任务执行完后自动销毁。
缺点:分为时间成本和空间成本。开启线程需要占用一定的内存空间(默认情况下主线程占用1M,子线程占用512).如果开启大量的线程会占用大量的内存空间。线程越多,cpu在调用线程上的开销就越大。程序设计更加复杂如多线程之间通信,多线程的数据共享。
思考题: Java虚拟机的启动时单线程还是多线程?
多线程。原因是垃圾回收线程也要先启动,否则很容易会出现内存溢出。原因是垃圾回收线程也要先启动,否则很容易会出现内存溢出。