为何需要线程?线程有哪些优点?
一、前序
首先了解一些基本的知识,现在所用的操作系统大多为多任务系统(分时操作系统)。所谓分时操作系统,就
是指可以同时执行多个程序的操作系统。具体地如:我们可以同时上网聊天、看电影、听音乐、玩游戏...。实际
上并不是CPU在同时执行这些程序,CPU将时间分割为一段段很小的时间片分配给这些程序,获得时间片的程
序开始执行,因为分配到的时间很短所以不等执行完毕,下一个程序有获得时间片开始执行程序。如此,多个
程序轮流执行一段很短的时间,由于CPU的高速计算能力,给人的感觉就像是多个程序同时运行一样。
二、进程的概念
有了以上的铺垫,下面我们再来了解一下“进程”。在多任务操作系统中都有进程这个概念。所谓进程,就
是指一个独立运行的应用程序实例,如上面提到的聊天程序。每个进程都有自己私有的虚拟地址空间(独立的
一块内存空间)、代码、数据和其他系统资源。进程在运行时创建的资源随着程序的终止而死亡。在进程的概
念中,每个进程的内部数据都是完全独立的,因此可以想象创建并执行多个进程的系统,内存开销是比较大
的。所以,线程此时应运而生。
三、线程的概念
与进程相似,线程是一段完成某个特定功能的代码,是程序中单个顺序的控制流;而与进程不同的是,同类
的多个线程是共享一块内存空间和一组系统资源的,而线程本身的数据通常只有微处理器的寄存器数据,以及
一个供程序执行时使用的堆栈。因此系统在产生一个线程,所花费的空间远远小于启动一个进程所花费的空
间,而且线程间彼此切换所需的时间也远远小于进程间切换所花费的时间。正因为如此,线程也被称为轻负荷
进程。线程本质上,是进程中的一段并发运行代码,所以线程需要操作系统投入CPU资源来运行和调度。
线程的状态有,创建、可运行、运行中、阻塞、死亡五种状态。线程从创建、运行到消亡的过程成为线程的生
命周期。通过线程的控制与调度可使线程在这几种状态间转化,每个程序至少自动拥有一个线程,成为主线
程。当程序加载到内存时,启动主线程。
四、线程的优/缺点
优点:
使用多线程的优点:
1).耗时的操作使用线程,能提高应用程序响应。
2).并行操作时使用线程,如C/S架构的服务器端并发线程响应用户请求。
3).多CPU系统中,使用线程提高CPU的利用率。
4).改善程序的结构。长而复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运
行部分,这样有利与程序的理解和修改。
5).空间花销小,线程间的切换快。
6).线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的
方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以
一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。
缺点:
必须认识到线程本身可能影响系统性能的不利方面,以正确使用线程:
1).线程也是程序,所以线程需要占用内存,线程越多占用内存也越多
2).多线程需要协调和管理,所以需要CPU时间跟踪线程
3).线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题
4).线程太多会导致控制太复杂,最终可能造成很多Bug
欢迎各位高手提出建议加以改正、补充!
以上总结参考了:http://dev.firnow.com/course/4_webprogram/asp.net/netjs/200847/108719.html
http://java.chinaitlab.com/line/373702.html