什么是多线程和多进程呢?
多线程程序包含两条或多条并发运行的任务。程序中每个这样的部分都叫一个线程(Thread),每个线程都有独立的执行路径。因此,多线程是多任务处理的一种特殊形式。
你一定知道多任务处理,当你在使用音乐软件的时候,你可以一边下载爱听的歌曲,一边播放着音乐,一边浏览着每日推荐音乐,这样同时进行的多任务也就是多线程,每一个任务都是一个线程。然而,多任务处理有两种不同截然不同的类型,基于进程的和基于线程的,认识两者的不同是非常重要的。
对很多读者,基于进程的多任务处理是更熟悉的形式。进程(process)本质上是一个执行的程序。因此,基于进程的多任务处理的特点就是允许你的计算机同时运行两个或更多的程序(一边使用浏览器,同时也打着游戏)。在基于进程的多任务处理中,程序是调度程序所分派的最小代码单位。
在基于线程的多任务处理环境中,线程是最小的执行单位。这意味着一个程序可以同时执行两个或者多个任务的功能。例如,一个文本编辑器可以在打印的同时格式化文本。所以,多进程程序处理“大图片”,而多线程程序处理细节问题。
多线程程序比多进程程序需要更少的管理费用。进程是重量级的任务,需要分配它们自己独立的地址空间。进程间通信是昂贵和受限的。进程间的转换也是很需要花费的。另一方面,线程是轻量级的选手。它们共享相同的地址空间并且共同分享同一个进程。线程间通信是便宜的,线程间的转换也是低成本的。当Java程序使用多进程任务处理环境时,多进程程序不受Java的控制,而多线程则受Java控制。
多线程帮助你写出CPU最大利用率的高效程序,因为空闲时间保持最低。这对Java运行的交互式的网络互连环境是至关重要的,因为空闲时间是公共的。举个例子来说,网络的数据传输速率远低于计算机处理能力,本地文件系统资源的读写速度远低于CPU的处理能力,当然,用户输入也比计算机慢很多。在传统的单线程环境中,你的程序必须等待每一个这样的任务完成以后才能执行下一步——尽管CPU有很多空闲时间。多线程使你能够获得并充分利用这些空闲时间。