理解多线程的实际意义和优势

首先理解并行和并发的区别:

并行:指在同一时刻,有多条指令在多个处理器上同时执行;

并发:指在同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。


大部分操作系统都支持多进程并发运行:程序员一边使用开发工具写代码,一边打开网页在查API,同时还开着网易云听歌······还没完,每台电脑运行时还有大量的底层支撑性程序在后台运行······这些进程看上去像是在同时工作。真相是,对于一个CPU而言,他在某个时间点只能执行一个程序,即一个进程,其实CPU是不断地在这些进程间轮换执行的,由于执行速度相对人的感觉来说过快,所以我们感觉不到而已。


而我们要谈的多线程,则是多进程概念的扩展。


操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。

线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源。因为多个线程共享父进程里的全部资源,因此编程更加方便,但必须更加小心。

线程可以完成一定的任务,可以与其他线程共享父进程中的共享变量及部分环境,相互之间协调来完成进程所要完成的任务。

线程是独立运行的,它并不知道进程中是否还有其他线程存在。线程的执行时抢占式的,也就是说,当前运行的线程在任何时候都可能被挂起,以便另外一个线程可以运行。

从逻辑角度来看,多线程存在于一个应用程序中,让一个应用程序中可以有多个执行部分同时执行,但操作系统无须将多个线程看作多个独立的应用,对多线程实现调度和管理以及资源分配。线程的调度和管理由进程本身负责完成。

总结起来,使用多线程编程具有以下优点:

(1)进程之间不能共享内存,但线程之间可以,且十分容易

(2)系统创建进程是需要为该进程重新分配系统资源,但创建线程则代价小得多,因此使用多线程来实现多任务并发比多进程的效率高。


多线程的实际应用:

(1)一个浏览器必须能同时下载多个图片

(2)一个web服务器必须能同时相应多个用户请求

(3)Java虚拟机本身就在后台提供了一个超级线程来进行垃圾回收

猜你喜欢

转载自blog.csdn.net/liu123641191/article/details/80904522