说到线程的概念,我们不得不提进程。那我们先看什么叫进程?(PS:这些概念也是从网上借鉴的)
1、进程的概念
进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。简单的说,当我们启动一个应用程序,就会有个进程。可以通过任务管理器查看到当前系统的进程有哪些。系统给进程分配了独立的内存空间
2、线程(Tread)
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。
每一个程序都至少有一个线程,那就是程序本身。线程是程序中一个单一的顺序控制流程。 在单个程序中同时运行多个线程完成不同的工作,称为多线程。
3、线程的状态
1)新建状态(new)
2)就绪状态(Runnable)
3)运行状态(Running)
4)阻塞状态(Blocked)
5)死亡状态(Dead)
4、线程的生命周期
5、线程给我们带来的好处
如果能合理地使用线程,将会减少开发和维护成本,甚至可以改善复杂应用程序的性能。如在GUI应用程序中,还以通过线程的异步特性来更好地处理事件;在应用服务器程序中可以通过建立多个线程来处理客户端的请求。线程甚至还可以简化虚拟机的实现,如Java虚拟机(JVM)的垃圾回收器(garbage collector)通常运行在一个或多个线程中。因此,使用线程将会从以下五个方面来改善我们的应用程序:
1). 充分利用CPU资源
现在世界上大多数计算机只有一块CPU.因此,充分利用CPU资源显得尤为重要。当执行单线程程序时,由于在程序发生阻塞时CPU可能会处于空闲状态。这将造成大量的计算资源的浪费。而在程序中使用多线程可以在某一个线程处于休眠或阻塞时,而CPU又恰好处于空闲状态时来运行其他的线程。这样CPU就很难有空闲的时候。因此,CPU资源就得到了充分地利用。
2). 简化编程模型
如果程序只完成一项任务,那只要写一个单线程的程序,并且按着执行这个任务的步骤编写代码即可。但要完成多项任务,如果还使用单线程的话,那就得在在程序中判断每项任务是否应该执行以及什么时候执行。如显示一个时钟的时、分、秒三个指针。使用单线程就得在循环中逐一判断这三个指针的转动时间和角度。如果使用三个线程分另来处理这三个指针的显示,那么对于每个线程来说就是指行一个单独的任务。这样有助于开发人员对程序的理解和维护。
3). 简化异步事件的处理
当一个服务器应用程序在接收不同的客户端连接时最简单地处理方法就是为每一个客户端连接建立一个线程。然后监听线程仍然负责监听来自客户端的请求。如果这种应用程序采用单线程来处理,当监听线程接收到一个客户端请求后,开始读取客户端发来的数据,在读完数据后,read方法处于阻塞状态,也就是说,这个线程将无法再监听客户端请求了。而要想在单线程中处理多个客户端请求,就必须使用非阻塞的Socket连接和异步I/O.但使用异步I/O方式比使用同步I/O更难以控制,也更容易出错。因此,使用多线程和同步I/O可以更容易地处理类似于多请求的异步事件。
4). 使GUI更有效率
使用单线程来处理GUI事件时,必须使用循环来对随时可能发生的GUI事件进行扫描,在循环内部除了扫描GUI事件外,还得来执行其他的程序代码。如果这些代码太长,那么GUI事件就会被“冻结”,直到这些代码被执行完为止。
在现代的GUI框架(如SWING、AWT和SWT)中都使用了一个单独的事件分派线程(event dispatch thread,EDT)来对GUI事件进行扫描。当我们按下一个按钮时,按钮的单击事件函数会在这个事件分派线程中被调用。由于EDT的任务只是对GUI事件进行扫描,因此,这种方式对事件的反映是非常快的。
5). 节约成本
提高程序的执行效率一般有三种方法:
(1)增加计算机的CPU个数。
(2)为一个程序启动多个进程
(3)在程序中使用多进程。
第一种方法是最容易做到的,但同时也是最昂贵的。这种方法不需要修改程序,从理论上说,任何程序都可以使用这种方法来提高执行效率。第二种方法虽然不用购买新的硬件,但这种方式不容易共享数据,如果这个程序要完成的任务需要必须要共享数据的话,这种方式就不太方便,而且启动多个线程会消耗大量的系统资源。第三种方法恰好弥补了第一种方法的缺点,而又继承了它们的优点。也就是说,既不需要购买CPU,也不会因为启太多的线程而占用大量的系统资源(在默认情况下,一个线程所占的内存空间要远比一个进程所占的内存空间小得多),并且多线程可以模拟多块CPU的运行方式,因此,使用多线程是提高程序执行效率的最廉价的方式。
相关推荐
了解线程池的概念也是Java多线程编程中的一个重要知识点。线程池是一种多线程处理形式,它将线程和任务的概念分离开来,能够有效管理线程资源,减少线程创建和销毁的开销,提高程序性能。Java中可以通过Executors类...
Linux 下 C 语言多线程编程实例 Linux 下的多线程编程是一种非常重要的技术,在...本实例提供了一个非常实用的多线程编程示例,帮助我们更好地理解多线程编程的基本概念和技术,并且可以作为实际应用的参考和借鉴。
本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。以下是这些实例可能涉及的关键知识点: 1. **线程创建**:C#中创建线程主要有两种方式,一是通过`System.Threading.Thread`...
学习MFC多线程编程,可以通过阅读"多线程编程.doc"和"多线程编程.pdf"文档获取更深入的理论知识,而"multithreadsrc"可能包含了一些实际的代码示例,可以帮助你更好地理解和应用这些概念。理解并熟练运用这些知识,...
### 多线程知识总结 #### 一、线程基础概念 **线程状态:** 在探讨多线程之前,我们需要了解线程的基本状态转换。一个典型的线程生命周期包括以下几个阶段: 1. **Start(启动):** 当线程被创建后调用`start()`...
在.NET框架中,C#语言提供了...以上内容涵盖了C#中多线程的基本使用、线程互斥和同步,以及线程池和异步编程的相关知识。在实际项目中,理解并灵活运用这些概念和技术,可以帮助我们编写出高效、稳定的多线程应用程序。
1. **多线程的概念**:多线程是指在一个程序中同时执行多个不同的线程,每个线程可以独立地执行任务,提高了CPU资源的利用率,减少了程序的响应时间。 2. **Java中的线程**:Java提供两种创建线程的方式,一是通过...
本章节将详细介绍嵌入式Linux多线程编程的基本概念、线程的创建、同步和互斥、线程属性、多线程实验等方面的知识点。 1. 线程基本概念 在Linux系统中,线程是进程内独立的一条运行路线,处理器调度的最小单元,也...
以下是一些关键的C++多线程知识点: 1. `std::thread` 类:这是创建新线程的基础,通过传递函数或成员函数指针以及参数来启动新的执行路径。 ```cpp #include void calculatePartOfPi(int start, int end) { //...
本文将深入探讨C#.NET多线程的基本使用、线程同步和互斥等关键知识点,结合六个实例进行详细解析。 1. **多线程基本使用** 多线程的基本使用涉及`System.Threading`命名空间中的`Thread`类。创建新线程可以通过...
多线程是计算机编程中的一个重要概念,特别是在Java这种支持多线程的编程语言中。在单核处理器系统中,多线程能实现程序的并发执行,提高系统的资源利用率,使得应用程序能够同时处理多个任务。在Java中,我们可以...
首先,我们需要理解线程的基本概念。线程是程序执行的最小单元,每个线程都拥有自己的程序计数器、系统栈、局部变量,但共享同一堆内存。在单核CPU中,多线程通过时间片轮转实现并发执行,而在多核CPU中,线程可以...
以下是对标题和描述中提到的C#多线程知识点的详细解释: 1. **线程创建**:C#提供多种方式创建线程,如`System.Threading.Thread`类的构造函数,`System.Threading.Tasks.Task`类,以及异步编程模型(async/await)...
通过提供的"多线程资料"文件,你可以深入学习这些概念并实践相关代码,进一步巩固理论知识。实践中,你会遇到如死锁、饥饿等多线程问题,这些都是在实际编程中需要考虑和避免的。因此,对多线程同步的理解和应用能力...
1. 多线程的基本概念: 文档开篇提出了一个单线程程序中存在的问题,即在执行耗时操作时,程序无法响应其他用户操作,从而引出多线程编程的必要性。这一节涉及了进程和线程的基本概念,说明了它们都是操作系统中用于...
一、多线程文件复制的基本概念 多线程文件复制是指在文件复制过程中,使用多个线程同时复制文件,以提高复制速度。这种技术可以充分利用多核CPU的计算能力,提高文件复制的效率。 二、C++实现多线程文件复制的方法...
本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用以及多线程互斥等核心概念。下面,我们将详细探讨这些关键知识点。 1. **线程创建与启动** 在C#中,我们可以使用`System.Threading.Thread`类来创建新...
#### 三、多线程的基本概念 1. **线程**:线程是进程中的一个执行单元,是最小的调度单位。每个进程至少包含一个线程。 2. **同步与互斥**:为了防止多个线程同时访问同一资源导致的问题(如数据不一致),需要采用...
1. **多线程基础**:论文可能会首先介绍多线程的基本概念,解释为什么在JAVA中需要使用多线程,以及多线程如何提升程序的执行效率。这部分内容可能会涉及到线程的创建、启动、同步和通信等基础知识。 2. **JAVA多...