`
MauerSu
  • 浏览: 494882 次
  • 性别: 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

    Linux多线程 C语言编程关于多线程

    统中才引入多线程机制,如今,由于自身的许多优点,多线程编程已经得到了广泛的应用。 本文我们将介绍在Linux 下编写多进程和多线程程序的一些初步知识。 1 引言 对于没有接触过 Unix/Linux 操作系统的人来说,fork ...

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

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

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

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

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

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

    Lesson07-多线程.pdf

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

    MOSI_一种基于超长指令字处理器的同时多线程微体系结构

    描述了一种基于超长指令字处理器的同时多线程微体系结构 ———MOSI ( MultiOp Splitting Issue ,多操 作①分离发射) . MOSI 动态地发射同一多操作内的指令 ,并通过写回缓冲保证计算结果的写回顺序与编译器的视图...

    Linux中多线程详解及简单实例

    Linux中多线程详解及简单实例 1.概念 进程:运行中的程序。 线程:一个程序中的多个执行路径。更准确的定义是:线程是一个进程内部的一个控制序列。 2.为什么要有线程? 用fork调用进程代价太高,需要让一个...

    一种应用代价评估的推测多线程路径预测方法 (2010年)

    推测多线程技术对于自动并行化非规则程序是有效的,然而基于控制流图和分支预测方法的线程划分方法,不可避免地受到划分路径上存在的控制依赖和数据依赖制约.针对现有的路径预测方法在考虑控制依赖影响的同时却不能...

    JAVA 多线程

     一个进程可拥有多个并行的(concurrent)线程  一个进程中的线程共享相同的内存单元/内存地址空间à可以访问相同的变量和对象,而且它们从同一堆中分配对象à通信、数据交换、同步操作  由于线程间的通信是在...

    Android 多线程实现重复启动与停止的服务

    主要介绍了Android 多线程实现重复启动与停止的服务的相关资料,多线程环境下为了避免死锁,一般提倡开放调用,开放调用可以避免死锁,它的代价是失去原子性,这里说明重复启动与停止的服务,需要的朋友可以参考下

    Linux下Fork与Exec使用

     多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix系统中才引入多线程机制,如今,由于自身的许多优点,多线程编程已经得到了广泛的应用。 下面,我们将介绍在Linux下编写多进程和多线程程序...

    基于冗余多线程的体系结构级容错措施的研究与发展 (2009年)

    在总结各种体系结构级容错措施的技术特点以及目前的研究现状和发展趋势的基础上,论述了冗余多线程(RMT)体系结构研究的时代背景、典型架构设计方法和存在的问题,以及今后研究的方向和发展趋势。提出了今后应该从...

    Java线程详细总结

    线程是Java的一大特色,从语言上直接支持线程,线程对于进程来讲的优势在于创建的代价很小,上下文切换迅速,当然其他的优势还有很多,缺点也是有的。

    一个进程池的服务器程序

    if (write_pid() ) //避免同时有多个该程序在运行 return -1; if (pipe(fd1) ) { perror("pipe failed"); exit(-1); } if (s_pipe(fd2) ) { perror("pipe failed"); exit(-1); } int port = atoi(argv...

    ransom-darkcat:Darkcat是具有多线程128位AES加密和AV规避技术的开源加密锁

    它利用了多线程128位AES加密技术,因此速度非常快,而在CPU上留下了一些占用空间以供基于现代活动的防病毒软件使用的代价。 我的卡巴斯基在大多数运行中均未检测到任何可疑活动,尤其是那些不涉及大量文件的活动,...

    C#线程同步的几种方法总结

    我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态;或者你的程序需要访问一些外部资源如数据库或网络文件等。这些情况你都可以创建一个子线程...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    对于多列排序,需要所有所有列排序方向一致,才能利用索引。 多选 19.关于类命名,下列哪些说法符合《阿里巴巴Java开发手册》:ABCD A .抽象类命名使用Abstract或Base开头。 B .异常类命名使用Exception结尾。 ...

    基于C++实现的单目多视图立体重建系统源码+项目说明.zip

    以上匹配均采用多线程实现 ### 稀疏重建 本项目给的示例代码是全局增量重建代码,主要分为以下步骤: 1.计算每个图像特征点的Track,也就是图像中每个特征点和几个其他图像中特征点对应。为了让重建结果更加鲁棒,...

Global site tag (gtag.js) - Google Analytics