iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >学习多核编程的境界有哪些
  • 821
分享到

学习多核编程的境界有哪些

2024-04-02 19:04:59 821人浏览 安东尼
摘要

本篇内容主要讲解“学习多核编程的境界有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“学习多核编程的境界有哪些”吧!第一层  先天&midd

本篇内容主要讲解“学习多核编程的境界有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“学习多核编程的境界有哪些”吧!

第一层  先天·方法·策略层

***层的基本思想就是“老子是伟大的多核计算科学家”一文中所提及的几个基本思想:“贪心”、“自私”、“偷”等。这些东西是先天存在的,是人类的一种本能,它又可以看作是方法、策略,因此把这层叫作“先天·方法·策略层”。

先天的方法策略并不限于“贪心”、“自私”、“偷”这三种,去年的SD大会上,我讲过一个基于抢夺的分布式内存管理算法,说明“抢”也是一种先天的方法策略。所谓:

“人之初,性本贪,性自私,性喜偷,性喜抢。”

为避免误解,这里先说明一下,这里所说的“偷”、“抢”和通常意义的偷、抢并不完全相同。“偷”和道家意义上的偷是同一个含义,即“不与取”之意;“抢”则是取“不归还”之意。

昔范蠡云:“且夫天舆弗取,反受其咎”。既然上天给了我们这么多好的方法策略,不用它的话显然是一种糟蹋。在多核编程中如何使用这些策略来进行编程,开源项目TBB中可以找到详细的代码例子。

第二层  目标·需求·评价层

先天的方法策略,虽然看似简单,但要用好它并不是一件容易的事情。自私、贪心、偷、抢等先天方法既可以用来做好事,也可以用来做坏事。这就牵涉到如何评价是否用好了这些先天方法策略的问题,也就是第二层目标·需求·评价层所需要解决的问题。

并不能为了使用先天方法策略而使用它,而是用它来满足我们的需求,到达一定的目标。那么这个需求和目标是什么呢?

在这里不想对一般的需求进行分析,只分析优化方面的需求。要达到优化,可以理解为各种资源的有效利用,可能有很多人已经有这方面的理解【1】。这些资源可以分为以下几个方面:

  1. 时间资源, 时间资源指的就是时间,比如一段程序或算法需要运行多长时间。

  2. 空间资源,如内存、硬盘、网络、各种io设备资源等均属于空间资源。

  3. 计算资源,如CPU、GPU、各种板卡上的处理器等均属于计算资源。

  4. 能源资源,通常指的是电能的消耗量,由于全球变软,环保问题的日益重要,这个在以往被忽视的资源也变得重要起来。

如何有效利用上述资源,并在各种资源利用间取得均衡,是制定目标和需求的基础,也是评价程序或算法优化程度的基础。

第三层  本质·根源·保障层

资源的有效利用,可不是一件简单的事情。在单核时代,许多程序员已有时间资源和空间资源的利用及均衡方面的丰富经验,那时几乎不用考虑计算资源的利用问题,因为处理器只有一个。

然而,在多核系统中,计算资源的利用成了头号问题,多个处理器的使用,使得程序员必须考虑如何将程序在各个处理器上并行地执行,这就牵涉到一个负载均衡问题。

负载均衡问题历来属于难题,由于客观上存在大量的共享资源,各种不同的共享资源情况复杂,并不能简单地将负载平均一下就摊到各个CPU核上去执行。那么用什么来保障负载平衡呢?如何去达到资源有效利用的***目标需求呢?

要 保障目标需求的实现,其核心就是公平、正义问题。当然,对公平、正义这两个词的理解,现实情况中存在多种解释,这里采用更广义的解释,凡是可从正确的前提 通过逻辑推导出来的定义,均视做正义,例如自然科学中的所有公理、定理及推论,均属于正义。在人类社会中,一些公认的道德标准、法律条文,也属于正义。

以动态偷取的调度算法为例,一般都是设计成每个线程一次偷取一个任务,实际上已经隐含地使用公平正义对偷取的数量做了限制,倘若不如此,任由一个线程一次将队列中所有任务都偷走,那么其他线程就偷不到任务了,这样就会出现负载不均衡,无法有效地利用多个处理器的计算资源。

再 比如基于抢夺的内存分配算法,每个线程使用了共享内存后,它并不返回给它的属主线程,而是据为己有,这样时间一长,必然有某些线程占有了过多的内存资源。 为了解决这个问题,解决方法就是每次抢完后,都需要判断一下自己占有的内存数量是否过多,过多的话则主动将一部分内存归返给公共内存池,从而实现负载均 衡。可以看出基于抢夺的内存分配算法中也使用了公平、正义以确保负载均衡。

公 平、正义问题可以说是算法之本,全局效率之源。为什么这么说呢?不妨看看现在美国发生的次贷危机,其根本原因是由于银行将贷款发放给无偿返能力的客户所造 成的。从公平、正义的角度看,实质上是银行为了自身的贪心、自私,违反了基本的公平、正义问题。次贷危机的后果,无需我多言,大家均已看到。可见,没有公 平正义,贪心、自私等先天方法策略必然会被滥用,其结果必然导致全局的不优。

由此可见,公平、正义是保障贪心、自私、偷、抢等先天方法策略得以正确使用的前提条件。本层名称中的本质、根源、保障,说的就是公平、正义。

需 要提及的是,在人类社会的现实中,由于人是有情感的,公平正义在执行中总会存在偏差,这时就需要仁爱来弥补其不足,这也许是儒家思想能够流传两千多年而不 灭的根本原因。当然,如果把仁爱思想也看作是道德标准的一部分的话,按照前面给出的正义的定义,其实仁爱也属于正义的范畴。

第四层  算法·实现·执行层

通过上面三个层面的阐述,可以知道先天的方法策略是实现优化的基本手段,资源有效利用则是实现优化的目标需求及评价条件,公平、正义则是保障先天的方法策略合理使用的前提条件。是不是有了这几样东西就可以做到达成优化的最终结果呢?

答案是“非也”。如果上面那几个东西就可以达成优化的结果,那么从街上随便抓个人恐怕都可以写出很好的多核程序来了,还要程序员干嘛,还要去学习多核编程的各种模式、技巧及算法干嘛?

就 像学了牛顿力学一样,有些人可以设计出摩天大厦,造出各种机械,有些人却啥也做不了。何也?运用好坏之不同也。要写出好的多核程序,同样牵涉导如何运用上 面三层中的基本原理思想方法的问题,而要用好这些基本原理思想,更多的还是要靠程序员自身的知识及能力,最终依赖于算法或程序的具体实现。就像有了道家, 儒家,却仍然少不了法家、农家、医家等各个领域的诸子百家。

到此,相信大家对“学习多核编程的境界有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 学习多核编程的境界有哪些

本文链接: https://www.lsjlt.com/news/86415.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 学习多核编程的境界有哪些
    本篇内容主要讲解“学习多核编程的境界有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“学习多核编程的境界有哪些”吧!第一层  先天&midd...
    99+
    2024-04-02
  • Flex程序员的境界有哪些
    这篇文章主要介绍了Flex程序员的境界有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex程序员的四重境界以前见过一些文章描述Flex程序员的层次、水准、特征等等内容...
    99+
    2023-06-17
  • 2021年需要学习的编程语言有哪些
    这篇文章主要讲解了“2021年需要学习的编程语言有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“2021年需要学习的编程语...
    99+
    2024-04-02
  • 有哪些学习Java编程常用的开发工具
    本篇内容介绍了“有哪些学习Java编程常用的开发工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在刚刚接触学习Java编程的时候,我们可以...
    99+
    2023-06-15
  • 在2021年需要学习的编程语言有哪些
    本篇内容主要讲解“在2021年需要学习的编程语言有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在2021年需要学习的编程语言有哪些”吧!学习你的第一个编程...
    99+
    2024-04-02
  • Axios中值得学习的核心知识点有哪些
    本篇内容介绍了“Axios中值得学习的核心知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、A...
    99+
    2024-04-02
  • Go语言编程算法有哪些值得学习的库?
    Go语言是一种快速高效的编程语言,它在近几年受到了广泛的关注。与其它编程语言相比,Go语言的特点在于它的并发性和简单性。这使得Go语言成为了许多开发人员的首选语言之一。 Go语言编程算法是一种非常重要的编程技能,它能够帮助开发人员解决各种问...
    99+
    2023-06-17
    教程 编程算法 numy
  • 零基础快速学习Java编程的方法有哪些
    本篇内容介绍了“零基础快速学习Java编程的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!零基础快速学习Java编程的方法:1、学...
    99+
    2023-06-15
  • 2021年值得学习的10种编程语言有哪些
    本篇内容介绍了“2021年值得学习的10种编程语言有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对于程序员和其他想转型开发的人员来说,...
    99+
    2023-06-15
  • Java线程学习之并发编程知识点有哪些
    本文小编为大家详细介绍“Java线程学习之并发编程知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java线程学习之并发编程知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、JMM 基础-...
    99+
    2023-07-02
  • 学习Python遇到的编码错误有哪些
    这篇文章主要讲解了“学习Python遇到的编码错误有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“学习Python遇到的编码错误有哪些”吧!1、误解Python范围python解析范围是...
    99+
    2023-06-16
  • Java学习过程的重点有哪些
    本篇文章给大家分享的是有关Java学习过程的重点有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java学习过程的重点主要说说Java的几大块吧,无法说得很细,因为其实每一...
    99+
    2023-06-03
  • 初学者有效学习编码的优秀小技巧有哪些
    本篇内容主要讲解“初学者有效学习编码的优秀小技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“初学者有效学习编码的优秀小技巧有哪些”吧!当一个人下定决心学...
    99+
    2024-04-02
  • 搭建Linux学习环境的具体步骤有哪些
    这篇文章主要介绍搭建Linux学习环境的具体步骤有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!   1.1、安装选择   安装学习的linux操作系统,有几种途径:   ...
    99+
    2024-04-02
  • Linux运维工程师必须学习Shell编程的原因有哪些
    这篇文章将为大家详细讲解有关Linux运维工程师必须学习Shell编程的原因有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Shell脚本语言是Linux / Unix系统管理以及自动化运维的重要工具...
    99+
    2023-06-05
  • Java编程中的好习惯有哪些
    这篇文章跟大家分析一下“Java编程中的好习惯有哪些”。内容详细易懂,对“Java编程中的好习惯有哪些”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“Java编程中的好习惯有哪些”...
    99+
    2023-06-02
  • Linux 下 PHP 分布式编程有哪些值得学习的经验?
    Linux下PHP分布式编程有哪些值得学习的经验? 随着互联网的发展,越来越多的应用需要支持高并发、高可用、大规模的用户访问。在这种情况下,分布式系统成为了一种不可避免的选择。而PHP作为一种广泛使用的脚本语言,也需要支持分布式编程。本文将...
    99+
    2023-11-05
    学习笔记 linux 分布式
  • 学习Nodejs的目的有哪些
    今天小编给大家分享一下学习Nodejs的目的有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2024-04-02
  • C++落选,2021年想学习的五大编程语言有哪些
    本篇文章为大家展示了C++落选,2021年想学习的五大编程语言有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。编程语言主要包括以下四种类型: 过程式编程语言:从上到下执行一系列语句或程...
    99+
    2023-06-15
  • Java多线程初学者需要学习哪些内容
    这篇文章主要介绍了Java多线程初学者需要学习哪些内容的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java多线程初学者需要学习哪些内容文章都会有所收获,下面我们一起来看看吧。线程简介介绍了什么是Java的线程...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作