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

03.多线程的代价

 
阅读更多
源:http://ifeve.com/costs-of-multithreading/
评:
原文链接:http://tutorials.jenkov.com/java-concurrency/costs.html

作者:Jakob Jenkov     翻译:古圣昌        校对:欧振聪

从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该明确在使用多线程时能多来的好处比所付出的代价大的时候,才使用多线程。如果存在疑问,应该尝试测量一下应用程序的性能和响应能力,而不只是猜测。

设计更复杂
虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。


上下文切换的开销
当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。

上下文切换并不廉价。如果没有必要,应该减少上下文切换的发生。

你可以通过维基百科阅读更多的关于上下文切换相关的内容:

http://en.wikipedia.org/wiki/Context_switch


增加资源消耗
线程在运行的时候需要从计算机里面得到一些资源。除了CPU,线程还需要一些内存来维持它本地的堆栈。它也需要占用操作系统中一些资源来管理线程。我们可以尝试编写一个程序,让它创建100个线程,这些线程什么事情都不做,只是在等待,然后看看这个程序在运行的时候占用了多少内存。

(全文完)


--------------------------------------------------------------------------------

原创文章转载请注明出处:多线程的代价
支持本站::Pay For Your Wish

--------------------------------------------------------------------------------
分享到:
评论

相关推荐

    cokepluscarbon#Java#03.多线程的成本1

    03.多线程的代价Going from a singlethreaded to a multithreaded application doesn't just

    C++多线程PPT和源码.rar

    而如果在一个进程中用多线程,彼此之间使用相同的地址空间,共享数据,线程切换的代价很小。多编程并发在企业中开发显得尤为重要,本课程包含Windows多线程编程与C++11高并发编程,通过浅显易懂的代码与讲解,让你的...

    Windows多线程技术

    在Windows操作系统中,多线程技术是程序设计中的重要概念,它允许应用程序同时执行多个不同的任务,从而提高系统的效率和响应速度。通过理解和掌握多线程技术,开发者可以编写出更加高效、并行处理能力更强的软件。...

    A星寻路 不贴墙 多线程 插件

    这个插件特别强调了“不贴墙”和“多线程”两个特性,这意味着它不仅能够避免角色在寻路过程中贴近障碍物,还能通过多线程技术提升计算速度,提高整体性能。 首先,我们来深入理解一下A星寻路算法。A星算法基于...

    Windows多线程

    在计算机科学领域,多线程是一种编程技术,它允许单个程序同时执行多个任务或子任务,从而提高程序的效率和响应性。特别是在Windows操作系统环境下,多线程被广泛应用于各种应用程序,包括用户界面响应、后台计算...

    VB的A*多线程例子

    在VB(Visual Basic)编程中,多线程技术允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。A*算法是一种广泛应用的路径搜索算法,尤其在游戏开发、地图导航等领域,用于找到两点之间的最短路径。在...

    ios多线程demo

    在iOS开发中,多线程是一项至关重要的技术,它能够帮助我们实现应用的高效运行,提升用户体验。"ios多线程demo"是一个示例项目,旨在帮助开发者理解并掌握iOS平台上的多线程编程。下面将详细介绍这个领域的关键知识...

    VC++多线程工作案例源代码

    在Windows操作系统中,线程是调度的基本单位,线程间的切换代价相对进程来说较小,因此多线程常用于实现并发操作。 二、VC++中的多线程支持 Microsoft Visual C++提供了丰富的多线程支持,主要通过以下两个库来实现...

    多线程安全问题的测试.txt

    Java中线程问问题描述,多线程的优势(进程线程区别): 1、进程之间不能共享内存,线程之间共享内存更容易,多线程可协作...2、创建进程进行资源分配的代价较创建线程要大得多,所以多线程在高并发环境中效率更高。

    python3爬虫中多线程的优势总结

    有些小伙伴跟小编讨论了python中使用多线程原理的问题,就聊到了关于python多线程的弊端问题,这点可能在使用的过程中大家会能感觉到。而且之前讲过的GIL也是对python多线程的一种限制。那么,我们为什么还要用多...

    JAVA 多线程

    Java多线程是Java编程中一个重要的概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应速度。在理解多线程之前,我们首先需要了解基础概念:程序、进程和线程。 1. **程序**:程序是静态的代码集合,...

    Lesson07-多线程.pdf

    多线程 在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握...

    Java多线程实例

    多线程的优点与代价: 1. **优点**: - 资源利用率更好:多线程可以充分利用多核处理器的计算能力,提高程序的执行效率。 - 程序设计在某些情况下更简单:如在网络编程中,每个连接可以由一个独立的线程处理,简化...

    有关vc的多进程线程.rar_Windows多进程_多进程_多进程 windows

    在Windows操作系统中,多进程和多线程是两种并发执行的方式,它们对于系统资源的管理和程序的并行处理至关重要。VC++(Visual C++)作为Microsoft的开发工具,提供了丰富的支持来实现这两种并发模型。 首先,我们要...

    在Arduino中使用ProtoThread创建多线程系统.pdf

    总结来说,ProtoThread为Arduino等资源受限的平台提供了实现多任务处理的有效手段,通过巧妙地管理状态和循环,以最小的资源代价实现了类似多线程的运行机制。这对于需要在有限资源下实现复杂逻辑的嵌入式项目来说,...

    GBase8s架构_02_进程及多线程结构.doc

    在深入理解GBase8s的架构时,我们需要关注其进程和多线程结构,这是决定其性能和效率的关键因素。 传统的基于进程的数据库服务器在处理大量并发连接时会遇到问题。每个用户连接通常需要一个单独的进程来处理,这...

Global site tag (gtag.js) - Google Analytics