专栏首页炉边夜话铁路与多核多线程

铁路与多核多线程

铁路与多核多线程

杨小华

  多核多线程已经成为当前一个时髦的话题,早在2005年C++大师Herb Sutter就说过免费的午餐已经结束,并发编程的时代已经来临。从接触第一个多线程项目以来,已经是第三个年头了,一直想把这几年的点点滴滴写成文章,让刚接触的人少走弯路,这便是我写这篇系列文章的初衷。

    如何理解多核多线程这些概念呢?

    在自然世界中,总有那么一些事物是类似的。如果我们加以抽象和归纳,就可以得出相同或者相类似的结论,比如铁路系统和多核多线程就有相似之处。

    对于任何一名出门在外的人来说,春节能买张回家的火车票,不能不说是人生的一大幸事。相信大家在排队买票的时候,曾经都抱怨过,怎么不多增开几列火车,让大家早点回家呢?当这种想法开始在大脑中萌发时,证明您已经拥有了多线程的思想。对于相同的出发地和目的地,通过增开列车的方法来提高运输效率,就相当于在一个进程中采用多线程的方法来提高程序的吞吐率。

    从成本和资源利用率的角度考虑,不可能为不同的目的地修建单独的铁路,而会共享相关路段。当不同列车需要同时使用同一路段时,就会造成道路的竞争,交通一旦拥塞,效率开始变的低下和事故频发。为了解决这个问题,信号灯开始出现在关键岔口上,只有当列车收到允许通过的信息后,才能继续前行。如果从多线程的角度来看待道路竞争引发的问题,可以认为是线程的同步问题。在多线程程序中,可以利用各种锁或者信号量等同步手段来解决资源冲突的矛盾,只有解决了资源冲突问题,才能保证程序的正确性。

    是不是多增开几列火车,就可以缓解买票难的问题呢(这里不讨论各方利益的问题)?临客便开始出现在人们的视野中。 如果临客和其他列车拥有相同的待遇,在关键路径上,按照FIFO的策略,排队一一通过,就有可能造成大量的火车晚点,久而久之,最终造成整个铁路系统的瘫痪。于是引入了优先级的概念,一旦发生资源冲突时,临客就停下来到旁边歇歇,让道给高优先级的大佬们(D/Z/T/K/N等开头的火车)。 从操作系统的角度来观察临客的解决方案,这个过程相当于多线程中的线程调度,让不同的线程拥有不同的优先级和调度策略,来提高程序的整体效率。

    解决了临客的调度问题,真的可以解决买票难的问题吗?不能,于是新的方案—— 大修铁路——又被提上了日程, 减少关键资源的冲突,让不同目的地的火车在不同铁路线路上驰骋。这种方法就相当于我们今天谈论的多核技术,让不同功能的进程在不同的核上运行,或者让同一进程的不同功能的线程运行在不同的核上。

    将多核多线程与实际生活中的例子进行类比,多核多线程显得并不神秘。它只是用来提高程序运行效率的一种手段,暂时还不会打破现有的编程模式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 调查问卷:测试你对多核多线程的认知程度

            目前,多核多线程编程已经成为一种趋势,但大部分程序员还没有从串行程序的思维中走出来。即使有些人对多核多线程的概念有所了解,但也是一知半解,...

    ternturing
  • 模仿的两端分别是山寨和微创新

                                                                                    ...

    ternturing
  • Intel多核培训感想

             今天是参加Intel多核和多线程培训的第一天,感触颇深。因为目前我们正在开发一个分布式的多线程系统,前不久也做过一些优化,听了今天的课程,能产...

    ternturing
  • 002.多线程-为什么要使用多线程

    在单核CPU中,多线程主要是为了降低阻塞。 多线程的并发,其实是一种“伪并行”。 在每个时刻,真正执行的只有一个线程。 但是,由于多线程减少了等待IO操作...

    qubianzhong
  • 面试前必须要知道的多线程知识

    高并发(多线程)可谓是我们开发者必要掌握的知识,在无论是校招面试还是社招,都是必考的知识点!

    Java3y
  • 如何做才能真正提升计算速度?

    遇上项目紧急情况,面对大量需要试算的数据时,如何快速提升计算效率,可能是最现实的问题。计算机操作系统提供了进程和线程模型,各种语言都有对这些模型的抽象,并且大多...

    double
  • 程序员,别再迷恋多线程工作了

    我刚刚尝试了一下,一边用 iPad 看“Java 极客技术”自制的 SpringBoot 视频(1.2X 倍速),一边在 iMac 上回复博客上读者的留言。过了...

    纯洁的微笑
  • Mysql 复制的延迟优化

    Mysql 复制过程中,数据延迟是很重要的问题,无法避免,只能尽量优化,使延时尽可能的小 要想优化复制过程,我们先看下复制的整个过程,看其中哪些步骤可以优化 ?...

    dys
  • 布朗大学90后研究生:我们复现了15亿参数GPT-2模型,你也行!

    BERT,XLNet,GPT-2和Grover等大型语言模型在生成文本和多个NLP任务方面取得了令人瞩目的成果。

    新智元
  • 从我们多年项目实践中,告诉您企业为什么要做IT运维管理转型?

    业务发展往往驱动着IT运维管理的同步转型或升级,企业IT部门往往习惯于通过采购服务或管理工具满足要求。

    嘉为科技

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动