zoukankan      html  css  js  c++  java
  • 关于并发程序设计 (一)

    Herb Sutter的观点

    Herb Sutter最近的一篇文章中如是说:“90年代,我们到处跟人叫讲,什么是对象,什么是虚函数,现在我们到处跟人说,什么是主动对象,什么是Future”,他还说,结构编程、面向对象,现在该轮到并发和并行了。

    记得在去年,Herb Sutter就写文章预示并发时代的到来,主要是因为CPU的主频将不再会有以前那样的增长速度,而将迎来多核时代。程序将是靠并发来提高运行效率。



    JDK 1.5 Concurrent包

    在传统的多线程程序中,经常会有:
    创建线程
    wait\notify
    重新发明轮子,例如BlockingQueue、Lock、Semaphore这样的基本工具类。

    不恰当的抽象,会导致难以承受的复杂度,代码错误多,常犯死锁、lost notify之类,也很容易导致性能低下。我也有过这样的经历,失败的教训刻骨铭心。

    JDK 1.5 util.concurrent包提供了一系列工具类,其中一些类的使用,代表一些观念的转变,更好的抽象,优雅的设计模式,会使多线程程序具有良好的结构。

    使 用Excector、ScheduleExecutorService、Future、BlockingQueue等类搭建起来的程序,会使得多线程程序 有很清晰明了的结构。其中的差别,似乎就象以前“非结构化程序设计”到“结构化程序设计”那样的转变,现在我们使用Future等设计模式,起到了同样好 的效果。

    结构化程序设计,使用if/else、while、do...while、for、switch等结构,把程序组织的清晰易懂,更容易掌握,更少出错。
    Executor、Future、Concurrent Collection等工具类、模式,使得并发程序结构清晰化/模式化,更容易掌握,更少出错,也更高效。

    随着多核CPU的普及,摩尔定律逐步失效,并发程序设计将会是程序员要求掌握的基本技巧,就如同现在程序员要求掌握面向对象一样。

    有几个文档值得一看的:

    javaone的幻灯片
    http://developers.sun.com/learning/javaoneonline/2005/coreplatform/TS-3423.pdf
    http://developers.sun.com/learning/javaoneonline/2005/coreplatform/TS-5807.pdf

    Doug Lea的文章
    http://gee.cs.oswego.edu/dl/papers/aqs.pdf

    上面的文档只能给你一个介绍,最好的办法还是通读一遍JDK 1.5 utilconcurrent包的源码,然后在实践中,改变观念,积累经验。


    并发和网络编程

    网 络中,存在中心服务器,不同机器的交互,并发和异步是常见行为。网络中的服务器,需要相应大量的并发,这种并发通常会是极端的并发,操作系统提供一些特别 的API,例如select模型,poll,windows的完成端口等等。JDK在1.4之后支持nio,主要也是针对大并发的支持。

    C++的框架ACE,提供了跨平台的线程、进程、Future等API,并且提供了Reactor、Proactor等框架,使得能够容易编写跨平台的并发网络服务器。

    ACE框架的一个思想就是,使用ACE和模式消除复杂性。这一点和JDK 1.5 concurrent包提供的高级设计模式类的意图是一致的。

    在《C++网络编程》卷1和卷2中讲述了一些模式,例如Half Sync/Aysnc vs Leader/Follow模式。这是ACE开发过程中的一些研究成果,我们查找ACE相关资料时,会发现一些关于并发方面的论文。ACE也提供了Future。

    我才运用ACE作了一些简单的应用,了解还不够深入,不过觉得JDK concurrent包在并发设计模式方面,比ACE走到更远。


    今天,你使用Future了吗?




  • 相关阅读:
    01视频传输,监控,直播方案摄像头如何采集的图像,MCU如何读取的图像数据
    203ESP32_SDK开发softAP+station共存模式
    2视频传输,监控,直播方案搭建视频流服务器,推送视频流,拉取视频流观看(RTMP,m3u8)
    F# (Part one)
    测试驱动开发(一)我们要的不仅仅是“质量”
    软件开发中的破窗效应
    结对编程神奇的力量
    《高性能网站建设指南》笔记
    【线程呓语】Thread
    【线程呓语】与线程相关的一些概念
  • 原文地址:https://www.cnblogs.com/jobs/p/556063.html
Copyright © 2011-2022 走看看