为何需要线程?线程有哪些优点?
一、前序
首先了解一些基本的知识,现在所用的操作系统大多为多任务系统(分时操作系统)。所谓分时操作系统,就是指可以同时执行多个程序的操作系统。具体地如:我们可以同时上网聊天、看电影、听音乐、玩游戏...。实际上并不是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
分享到:
相关推荐
在"C++多线程学习"这个主题中,我们主要探讨的是如何在C++环境中创建和管理线程,以及解决并发访问时可能出现的问题。 一、C++11及后续版本中的多线程支持 自C++11标准开始,C++提供了内置的多线程库`<thread>`,...
总的来说,《COM技术内幕》这本书涵盖了从基础的COM概念到高级特性的全面讲解,包括组件创建、接口设计、线程模型、类型库、接口继承和聚合等内容,对于想要深入理解COM技术的开发者来说,是一本不可多得的学习资料...
DOCTYPE>、<html>、<head>、<body>)、文本格式化标签(如<b>、<i>、<u>)、段落和标题(<p>、<h1>至<h6>)、链接(<a>)、图像(<img>)、表格(<table>、<tr>、<td>)、列表(<ul>、<ol>、<li>)等。此外,还可能...
首先,我们需要理解jsoup库的基本概念和功能。jsoup提供了丰富的API,用于解析HTML文档,获取DOM树,并允许我们通过CSS选择器来定位和提取元素。例如,我们可以使用`Jsoup.connect(url).get()`方法来获取指定URL的...
Java中的`Object`类是所有Java类的根类,无论你定义的类是否明确声明了继承自某个类,它都隐式地继承自`Object`。...在学习`JAVA_bject类`的过程中,可以结合具体的例子进行实践,以更好地理解和掌握这些概念。
在学习Java多线程的过程中,理解线程与进程的概念是非常基础且重要的一步。首先,进程是一个程序的执行实例,是操作系统资源分配的基本单位,具有独立的地址空间和运行状态。每个进程至少包含一个线程,我们称之为...
多线程是计算机编程中的一个核心概念,尤其是在Java、C++等高级编程语言中,它被广泛用于提高程序的执行效率。本汇总资料主要聚焦于多线程的学习,旨在帮助开发者深入理解并熟练掌握这一技术。 多线程是指在单个...
通过实际项目深入理解和掌握C# 基本语法、面向对象的思想、类的概念和使用、对象的创建、排序、IO操作等 <br>数据库知识和 SQL Server 2000 (40课时) 讲授数据库的基本知识和SQL Server 2000, 讲授数据库的设计和...
通过实际项目深入理解和掌握C# 基本语法、面向对象的思想、类的概念和使用、对象的创建、排序、IO操作等 <br>数据库知识和 SQL Server 2000 (40课时) 讲授数据库的基本知识和SQL Server 2000, 讲授数据库的设计和...
总结,本资料“C#多线程学习代码资料”会涵盖这些知识点,并通过示例代码帮助初学者理解多线程的创建、同步、通信以及异常处理等概念,是学习C#多线程编程的良好起点。通过深入学习和实践,开发者能够更好地掌握多...
本文将深入探讨Java线程的核心概念、API以及在实际开发中的应用,旨在帮助你理解和掌握这一关键技能。 首先,我们需要了解什么是线程。在单核CPU系统中,线程是操作系统调度的基本单位,而在多核CPU系统中,每个...
总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个方面,深入理解和掌握这些知识点对于提升Java程序的性能和复杂性至关重要。通过阅读提供的"Java多线程.pdf"文档,你可以进一步了解和...
东南大学滕至阳教授的PPT学习教案涵盖了操作系统的重要概念,特别是关于并发程序设计的部分。并发处理是现代操作系统的关键特性,允许多个任务在似乎同时进行的状态下执行。 在并发关系的讨论中(图8-2和8-3),...
以上各章节的学习,将使读者具备开发Windows桌面应用程序的基础,能够理解并熟练运用Windows API进行程序设计。在实际编程中,理解这些概念并能灵活应用,对于解决复杂问题和优化程序性能至关重要。通过分析和实践...
在深入探讨C#多线程教程之二的内容之前,让我们先理解一下多线程的基本概念。多线程是指在一个程序中同时运行多个线程的能力,每个线程都可以独立执行一部分任务,从而提高程序的并发性和响应性。在C#中,多线程是...
### Java中的多线程学习总结 #### 一、线程与进程的概念 在计算机科学中,**进程**和**线程**是两个重要的概念。早期的Windows 3.x系统中,进程是最小的运行单位。到了Windows 95/NT等操作系统中,除了进程外还...
Applet是一种早期Web技术,它允许开发者在网页中嵌入小型Java程序,为用户提供动态...虽然现代Web开发更多倾向于使用JavaScript、HTML5 Canvas等技术,但理解Applet的工作原理和历史仍对深入学习Java和Web技术有帮助。
本教程将帮助初学者理解C#中的多线程概念,并通过一个Windows Forms应用程序实例,演示如何在WinForm控件中启动、暂停、继续子线程以及输出数据。 首先,我们来看多线程的基本概念。在单线程程序中,所有的任务按...