随着互联网的不断发展,越来越多的程序员在开发软件的时候都使用了多线程等编程技术,而本文我们就通过案例分析来简单了解一下,多线程编程好处都有哪些。
单线程的缺点使用多线程的好处
围绕执行任务来管理应用程序时,一步要指明一个清晰的任务边界(taskboundaries).理想情况下,任务是独立的活动:它的工作并不依赖于其他任务的状态、结果或者边界效应.独立有利于并发性,如果能得到相应的处理器资源,独立的任务还可以并行执行.
在正常的负载下,服务器应用程序应该兼具良好的吞吐量和快速的响应性.应用程序提供商希望程序支持尽可能多的用户,所以会努力降低每个用户的开销;而用户希望尽快获得响应.进一步讲,应用程序应该在负荷过载时平缓地劣化,而不应该负载一高就简单地以失败告终.为了达到这些目的,你要选择一个清晰的任务边界,并配合一个明确的任务执行策略.
大多数服务器应用程序都选择了下面这个自然的任务边界:单独的客户请求.将独立的请求作为任务边界,可以让任务兼顾独立性和适当的大小.
单线程的缺点:对于一个单线程化的服务器,阻塞不仅仅延迟了当前请求的完成,而且还完全阻止了需要被处理的等待请求.如果请求阻塞的时间过长,用户将看不到响应,可能任务服务器已经不可用了.同时,单线程在等待它的I/O操作时,CPU会处于闲置状态,因此导致了资源利用率非常低.
顺序化处理几乎不能为服务器应用程序提供良好的吞吐量或快速的响应性.不过也有特例,比如当任务的数量很少但生命周期很长时,或者当服务器只服务于的用户时,服务器在同一时刻只需同时处理一个请求---但是大多数服务器应用程序都不是以这种方式工作的.
多线程的好处注意事项:
1.由新创建的线程去执行任务,主线程可以更迅速的开始下一个任务.从而提高了响应性
2.并行处理任务,这使得多个任务可以同时得到处理,如果有多个处理器,或者出于I/O未完成、锁请求以及资源可用性等任何因素需要阻塞任务时,程序的吞吐量会得到提高.
3.任务处理代码必须是线程安全的,因为有多个任务会并发地调用它.
在中等强度的负载水平下,"每任务每线程(thread-per-taks)"方法是对顺序化执行的良好改进.只要请求的到达速度尚未超出
服务器的请求处理能力,那么这种方法可以同时的带来更快的响应性和更大的吞吐量,