`
hizhangqi
  • 浏览: 89420 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

单线程(Thread)与多线程的区别

 
阅读更多
单线程(Thread)与多线程的区别

        首先了解一下cpu,随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架的硬件逐渐成为瓶颈,最高为4G,事实上目前3.6G主频的CPU已经接近顶峰。

       多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O,OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程。这个线程其实是进程执行的一条线索,除了主线程外你还可以给进程增加其它的线程,也即增加其它的执行线索,由此在某种程度上可以看成是给一个应用程序增加了多任务功能。当程序运行后,您可以根据各种条件挂起或运行这些线程,尤其在多CPU的环境中,这些线程是并发运行的。多线程就是在一个进程内有多个线程。从而使一个应用程序有了多任务的功能。多进程技术也可以实现这一点,但是创建进程的高消耗(每个进程都有独立的数据和代码空间),进程之间通信的不方便(消息机制),进程切换的时间太长,这些导致了多线程的提出,对于单CPU来说(没有开启超线程),在同一时间只能执行一个线程,所以如果想实现多任务,那么就只能每个进程或线程获得一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片很短,这样给用户的感觉是同时有好多线程在执行。但是线程切换是有代价的,因此如果采用多进程,那么就需要将线程所隶属的该进程所需要的内存进行切换,这时间代价是很多的。而线程切换代价就很少,线程是可以共享内存的。所以采用多线程在切换上花费的比多进程少得多。但是,线程切换还是需要时间消耗的,所以采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些。即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。上述结果只是针对单CPU,如果对于多CPU或者CPU采用超线程技术的话,采用多线程技术还是会提高程序的执行速度的。因为单线程只会映射到一个CPU上,而多线程会映射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。

    

分享到:
评论

相关推荐

    单线程与多线程的区别

    单线程和多线程是计算机程序执行时的两种不同模型,它们在处理并发任务、资源管理和性能上有着显著的差异。理解这两种模型是编程尤其是服务器端开发的基础,尤其是在Java、C#等支持多线程的编程语言中。 首先,让...

    JAVA单线程多线程

    ### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...

    C#单线程与多线程实例

    本文将深入探讨C#中的单线程与多线程实例,帮助你理解它们的区别,并提供相关的实践示例。 一、单线程 单线程意味着一个应用程序只有一个执行线程。在这种情况下,程序按照预定的顺序执行任务,一次只能处理一个...

    单线程与多线程

    在提供的压缩包文件"day21Test"中,可能包含了相关的练习或测试代码,用于实践和检验对单线程与多线程的理解。通过编写和运行这些代码,开发者可以更直观地体验和掌握这两种线程模型的区别和使用技巧。 总之,单...

    VC++多线程与单线程

    本篇文章将深入探讨VC++中的多线程与单线程,以及它们的应用和实现。 **单线程** 单线程是指程序只有一个执行路径,所有任务按顺序执行。在单线程应用中,一旦一个任务开始执行,其他任务必须等待其完成才能继续。...

    【源码】[疑难]在单线程中模拟多线程的工作模式

    标题中的“【源码】[疑难]在单线程中模拟多线程的工作模式”意味着我们要探讨如何在单线程环境中模拟多线程的行为。在.NET框架中,尤其是在Windows编程中,多线程是一个常见的需求,它能提高程序的并发性能和响应...

    VB单元线程模型实现多线程

    2. **线程同步与互斥**:在多线程环境中,线程同步是必要的,以防止多个线程同时访问共享资源,可能导致数据不一致。VB提供了`Mutex`类来实现线程间同步。`Mutex`是一个临界区对象,当一个线程获得了`Mutex`,其他...

    android 单线程 多线程下载

    在Android中,我们可以使用`AsyncTask`、`Thread`、`Handler`、`Runnable`以及`ExecutorService`等工具来实现多线程。 下面以`AsyncTask`为例,简述如何实现多线程下载: ```java class DownloadTask extends ...

    C#单线程及多线程演示。详细注释 源码

    本资源“C#单线程及多线程演示”提供了详细的源码和注释,非常适合初学者学习和理解。 首先,让我们了解一下单线程。在C#中,每个进程默认都有一个主线程,它负责执行程序的入口点(Main方法)。单线程意味着所有的...

    C#线程详解,单线程,多线程,线程管理

    本篇文章将深入探讨C#中的单线程、多线程以及线程管理,帮助你理解和掌握这一核心概念。 ### 1. 单线程 在单线程环境中,程序按照预定的顺序执行,一次只能处理一个任务。C#的标准控制流(如`Console.ReadLine()`...

    java单线程多线程clientserver

    Java中的单线程和多线程是编程中的关键概念,特别是在服务器端开发中。了解它们的原理和应用对于构建高效、可扩展的客户端-服务器应用至关重要。以下是对这些概念的详细解析。 首先,我们来谈谈单线程。在Java中,...

    单线程下ThreadX线程调度问题

    总之,虽然ThreadX的调度功能在单线程环境下并未充分展现,但理解这些机制对开发者来说依然重要,因为它们为扩展到多线程和复杂实时应用奠定了基础。了解ThreadX的特性,有助于编写高效、可维护的代码,适应未来系统...

    vb 多线程 实例(thread 类创建)

    以下是一些关于使用Thread类创建多线程的关键知识点: 1. **创建线程对象**: 首先,我们需要创建Thread类的一个实例,并传递一个委托(Delegate)到构造函数。这个委托指向线程需要执行的方法。例如: ```vb ...

    VC单线程编程实例

    对于初学者来说,理解单线程编程是学习多线程和并发编程的基础。 在VC中,可以使用Windows API函数或者C++标准库中的`<thread>`来创建线程。在描述中提到的"线程的简单应用"可能涵盖了以下几个方面: 1. **创建...

    单线程文件下载源码,

    对于单线程到多线程的转换,我们需要考虑以下几个知识点: 1. **线程创建与管理**:在多线程环境下,我们需要创建多个线程,每个线程负责下载文件的一部分。这涉及到了线程的创建(如Java的`Thread`类或C++的`std::...

    单线程 多线程 线程池 计算随机数的一价和

    本主题将详细探讨单线程、多线程以及线程池,并结合计算随机数的一价和来阐述这些概念的实际应用。 **单线程**:单线程是指程序的执行流程只有一个线程,这意味着程序的所有操作都会按照顺序依次进行。在单线程环境...

    程序实践三 单线程 多线程

    在编程领域,单线程和多线程是两种基本的执行模式,它们直接影响着程序的性能和并发能力。本文将详细探讨"程序实践三"中关于单线程和多线程的知识点,以及如何在实际操作中应用这些概念。 首先,让我们理解单线程。...

    QT多线程moveToThread使用方式

    6. **通信与同步**:在多线程环境中,线程间的通信和同步非常重要。QT提供了`signals`和`slots`机制来安全地在不同线程间传递信息。通过`QObject::connect()`,可以设置信号和槽的线程关联,确保数据交换的正确性。 ...

    java多线程thread实例

    在这个实例中,我们将深入探讨如何使用`Thread`类创建和管理多线程。 1. **线程的基本概念** - **线程**:线程是程序执行的最小单元,一个进程可以包含多个线程,它们共享同一内存空间,各自执行不同的任务。 - *...

Global site tag (gtag.js) - Google Analytics