阅读更多

2顶
2踩

企业架构

转载新闻 并发策略:多线程编程

2015-08-03 15:26 by 副主编 mengyidan1988 评论(7) 有7226人浏览
相比于编程领域的其他问题,多线程编程显得尤为困难。

– 多线程的环境使我们的程序非线性。没有人知道系统下一刻会执行哪一条语句。不幸的是,绝大多数程序(比如C++,Java)是线性地编写的:下一条语句总是在上一条执行完后执行。更严重的是,我们还在学习编程时就被灌输了,程序是线性执行的这一观点。因此,在多线程的编程范式上,绝大多程序员举步维艰。

– 多线性编程几乎是在多个方向上,爆炸般地撑大了程序的状态空间。我们很难在面对海量的程序状态的可能结果的情况下,仍然清晰地理解一个多线程程序,更毋论编写和测试程序。我们也很难去测试所有可能的状态,因为这些状态实在是太多了。

– 多线程编程使一个确定性的程序变为非确定性。这引入了更多测试上的问题。

– 糟糕的并发策略会显著地拖慢程序的性能,在一些并发策略的运行成本特别高昂的系统上(例如Windows),这个问题更为严重。

– 在多线程编程时,我们可用的debug工具非常少。如果找不到趁手的debug工具,真不如干脆当做自己没有任何调试工具。因此,忘掉调试器这回事吧。

– 很多语言,特别是C++,根本不支持多线程编程。Java在多线程上倒是有着出彩的表现,原因是Java实现了monitor机制。然而,这些机制并非一劳永逸的防弹衣,它们也并非在任何情形下都适用。

– 很多系统提供了内建的通过简陋的C调用实现的并发设计。然而,采用面向对象的并发实现会显得好的多,特别是在C++中,你可以控制构造/析构函数的加锁/解锁,从而达成预期的平衡。当前我成功地实现了这一点,并且我的C++环境有着一些非常棒的支持并发的对象。有趣的是,这些优秀的并发需要程序员自己来实现,而非囊括在语言特性中,我完全可以用功能等同的第三方代码来替换它们,从而测试我的多线程代码。
– 目前有许多著名的,广泛验证过的模式可用于处理并发问题,比如Exception Handling和Resumable Exception。报错往往相对地更多集中于程序代码中(debug是一个非常有趣的过程),所以异常检验尤为重要。异步故障引入了一些全新的故障类别,比如死锁,竞争条件,线程的报错处理和live lock。这些都错误通常都非常地模糊,你既不知道该再哪里处理这些错误,也不知道让谁来定义处理的代码。

原文链接:http://c2.com/cgi/wiki?SynchronizationStrategies
译文链接:https://www.textarea.com/DesGemini/bingfa-celve-duoxiancheng-biancheng-yiwen-63/
来自: textarea.com
2
2
评论 共 7 条 请登录后发表评论
7 楼 fairylandd 2015-08-10 17:28
这贴就应该沉掉
6 楼 a123159521 2015-08-06 11:29
Multipe Thread is not easy to test, i agree,important thing need to say three times.
5 楼 a123159521 2015-08-06 11:17
Multipe Thread is not easy to test, i agree.
4 楼 迪伦少校 2015-08-06 07:52
教条主义!估计是从那段摘过来的吧....
3 楼 windlike 2015-08-05 10:20
嗯,说了一堆空话
2 楼 周末瑜伽 2015-08-04 09:14
感觉没有实际的内容
1 楼 arsemilan 2015-08-03 16:26
没看出来说的啥

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Java并发编程:阻塞队列

    我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。我们来讨论另外一类容器:阻塞队列。  在前面我们...

  • Java 高并发编程详解:多线程与架构设计

    部分主要阐述 Thread 的基础知识,详细介绍线程的 API 使用、线程安全、线程间数据通信,以及如何保护共享资源等内容,它是深入学习多线程内容的基础。 第二部分引入了 ClassLoader,这是因为 ClassLoader 与线程...

  • Java 并发编程(多线程)

    并发编程,多线程

  • 多线程及并发编程之线程池一

    Java中的线程池是运用场景最多的并发框架,但思考下为什么要使用线程池呢? (1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 (2)提高响应速度。当任务到达时,任务可以不需要等到...

  • Python并发编程:多线程与多进程实践

    并发编程是指计算机系统中同时执行多个独立的计算任务。这些任务可以同时执行也可以按照一定的调度策略交替执行。在并发编程中执行的任务需要独立管理自身的资源,且需要与其他任务共享资源。Python提供了threading...

  • Java并发编程实战:掌握多线程编程的交错优化和高效实践

    掌握Java并发编程的基本原理和实践技巧,可以帮助我们更好地编写高性能的多线程程序。本文介绍了Java并发编程的基本原理和实践技巧,包括线程和进程、同步和互斥、线程间的通信、线程池等方面的内容。希望读者通过...

  • 编程必备:JAVA多线程详解

    本篇博客文章中,我们将会探讨多线程编程的相关知识和技巧。通过代码示例和实际应用案例来深入了解多线程的具体实现和应用方法,帮助更好地掌握多线程编程技术,提高程序效率和性能。后期随学习深入还会补充修改。...

  • 【3】Java并发编程:多线程基本概念

    下面就Java并发编程中的涉及多线程的基本概念做一个总结:1、TPS(Transactions Per Second,每秒事务处理数) : 一秒内服务端平均能响应的请求总数 2、高速缓存Cache 3、Java内存模型(Java Memory Model):变量、工作...

  • 网络socket编程实现并发服务器——多线程编程

    多线程编程

  • 2024年JAVA多线程并发编程面试题(持续更新)

    这里写目录标题并发编程基础blocked 和 waiting 的区别线程的 run()和 start()有什么区别?为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?说说线程的生命周期及五种基本状态...

  • 【已解决】利用 Java 多线程并发编程提高数据处理效率

    因此,为了有效缩短接口方法的执行时间,便考虑使用多线程并发编程方法,利用多核处理器并行执行的能力,通过异步处理数据的方式,便可以大大缩短执行时间,提高执行效率。那么在使用多线程异步更新的策略后,从当初...

  • 【4】Java并发编程:多线程中的缓存一致性和CAS

    随着多核时代的到来,并发操作已经成了很正常的现象,操作系统必须要有一些机制和原语,以保证某些基本操作的原子性,比如处理器需要保证读一个字节或写一个字节是原子的,那么它是如何实现的呢?有两种机制:总线...

  • JAVA:多线程异步并发提升程序性能的关键技术

    多线程异步并发提升程序性能的关键技术

  • 并发编程面试题(2020最新版)

    文章目录基础知识并发编程的优缺点为什么要使用并发编程(并发编程的优点)并发编程有什么缺点并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全?并行和并发有什么区别?什么是多线程,多线程的优劣?...

  • C++并发编程:如何编写多线程代码

    多线程是指在程序中同时运行多个线程,每个线程都可以独立执行不同的代码段,且各个线程之间共享程序的数据空间和资源。优点:提高程序的处理能力,增加响应速度和交互性。缺点:线程的切换有一定的开销,且多线程...

  • 【java学习】多线程之高并发编程:线程&任务&启动任务

    1,synchronized(同步块)(1)概念用synchronized 关键字来实现同步块,所有加上synchronized 的块语句,在多线程访问的时候,同一时刻只能有一个线程能够访问,另一个线程必须等到当前线程访问完毕才能访问此代码...

  • Java 8并发集合:安全高效的多线程集合

    Java 8引入了一些并发集合类,提供了安全高效的多线程集合操作。本教程将介绍Java 8中的并发集合类,包括ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentSkipListSet和CopyOnWriteArrayList。

  • 并发与多线程

    并发:在某个时间段内,多任务交替处理的能力。 并行:同时处理多任务的能力。 并发与并行的目标:尽肯能快的执行完所有任务。 并发特点: 并发程序之间有相互制约的关系。 (1)直接制约:一个程序需要另一个程序的...

  • 深入浅出Python多线程、多进程和并发编程

    通过开发这两个通用函数模板,用户可以在自己的项目中轻松使用多线程和多进程,只需编写具体的任务函数并传入合适的线程数量或进程数量,即可快速实现并发处理,提高程序的性能和效率。这个并发通用函数模板允许用户...

  • Note4:多线程编程1

    线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可以看作是Unix进程的表亲,所有的线程都是在同一进程空间运行,这也意味着多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和...

Global site tag (gtag.js) - Google Analytics