关于各种密集型及敏感型应用的概念辨析

由于在学习过程中接触了很多计算密集型、IO密集型、数据密集型等xx密集型应用,以及内存带宽敏感型、延迟敏感型等应用,故在此对这些应用进行辨析。

其实,无论是什么密集型还是敏感型应用,都需要从计算机系统的角度出发去分析。完整的系统包括CPU、内存、存储以及网络部分,从这4部分出发分析应用的特点即可得出结论。

CPU密集型/计算密集型(CPU-bound)

系统瓶颈在CPU而非其他如存储等资源。需要CPU执行大量计算任务,CPU始终处于满载状态。机器学习的模型训练和推理,涉及大量的矩阵运算的任务均为CPU密集型应用。CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程),而在单核CPU上,无论你开几个模拟的多线程该任务都不可能得到加速,因为CPU总的运算能力就只有这么多,故而CPU密集型任务通常将线程数设置为系统CPU核数,提升系统运算能力的同时减少进程/线程切换。

IO密集型/存储密集型(I/O-bound)

系统瓶颈在IO资源(存储资源)。系统运作,大部分的状况是CPU在等IO (硬盘/内存) 的读写操作,CPU负载并不高。当线程进行 I/O 操作 CPU 空闲时,启用其他线程继续使用 CPU,以提高 CPU 的使用率。例如:数据库交互,文件上传下载,网络传输等。CPU 使用率较低,程序中会存在大量的 I/O 操作占用时间,导致线程空余时间很多,通常就需要开CPU核心数数倍的线程

网络密集型(network-intensive)

系统瓶颈在网络。这类应用通常需要频繁地进行网络通信和数据传输,涉及大量的网络请求和数据传输操作。网络密集型应用可能包括在线游戏、视频流媒体、社交网络应用、实时通信应用等。这些应用通常需要快速响应和稳定的网络连接,以确保用户体验和数据传输的效率。网络密集型应用的性能受到网络带宽、延迟、稳定性等因素的影响,需要综合考虑网络资源的管理和优化。

内存密集型(memory-intensive)

内存密集型应用是指需要大量内存资源来进行运行和处理数据的应用程序。这类应用通常涉及大量的数据处理和计算操作,需要在内存中存储和操作大规模数据集。内存密集型应用可能包括大型数据库系统、数据分析应用、内存缓存系统等。
内存密集型应用通常会频繁地访问和操作内存中的数据,而不涉及大量的计算或I/O操作。这些应用对系统内存的需求较高,需要足够的内存资源来存储和处理数据,以确保应用程序的性能和效率。内存密集型应用的性能受到系统内存容量和内存带宽的影响,需要合理管理内存资源并进行优化,以满足应用程序的内存需求。

带宽密集型(bandwidth-intensive/bandwidth throttling)

在计算机系统中,带宽通常指的是系统对外通信的带宽,即系统与外部网络或其他系统之间进行数据传输的速率。带宽密集型应用通常指的是需要大量网络带宽资源来进行数据传输和通信的应用程序。带宽密集型应用主要关注系统对外通信的带宽需求,需要足够的网络带宽资源来支持数据传输和通信操作。
但是经过一些论文阅读发现,带宽密集型应用的定义好像比上面这种对外通信带宽的概念要广,同时涉及到描述描述系统内存模块与处理器之间的数据传输速率的内存带宽,以及通常用于描述系统与外部存储设备或其他外部设备之间的数据传输速率的IO带宽。所以个人认为带宽敏感型应用也可以分为系统内部带宽或者系统对外通信带宽。

数据密集型

数据密集型应用与计算密集型应用是存在区别的,传统的计算密集型应用往往通过并行计算方式在紧耦合的超级计算机上运行少量计算作业,即一个计算作业同时占用大量计算机节点。而数据密集型应用的特点主要是:

  • 大量使用异构形式的数据,且数据处理作业可以分布在松耦合的计算机集群系统的不同节点上运行;
  • 业务的主要挑战/全部业务价值均来自于大量数据,具有高密度的海量数据I/O吞吐需求
  • 数据集的大小并非评判当前应用是否为数据密集型应用的关键,最主要的是数据不断变化(数据流驱动)且需要实时处理
  • 对海量和高速变化数据的获取、管理、分析和理解

数据密集型计算指能推动前沿技术发展的对海量和高速变化的数据的获取、管理、分析和理解。这包含了三层含义:

  • 它所处理的对象是数据,是围绕着数据而展开的计算。它需要处理的数据量非常巨大,且快速变化,它们往往是分布的、异构的。因此,传统的数据库管理系统不能满足其需要。"计算"包括了从数据获取到管理再到分析、理解的整个过程。因此它既不同于数据检索和数据库查询,也不同于传统的科学计算和高性能计算。
  • 它是高性能计算与数据分析和挖掘的结合。
  • 它的目的是推动技术前沿发展,要想推动的工作是那些依赖传统的单一数据源、准静态数据库所无法实现的应用。

数据型密集计算的典型应用可概括为以下三类:

  • Web应用:无论是传统的搜索引擎还是新兴的Web 2.0应用,它们都是以海量数据为基础,以数据处理为核心的互联网服务系统。为支持这些应用,系统需要存储、索引、备份海量异构的Web页面、用户访问日志以及用户信息(Profile),并且还要保证对这些数据快速准确的访问 。显然,这需要数据密集型计算系统的支持,因而WEB应用成为数据密集型计算发源地。
  • 软件即服务(Software as a Service, SaaS)应用:SaaS通过提供公开的软件服务接口,使得用户能够在公共的平台上得到定制的软件功能,从而为用户节省了软硬件平台的购买和维护费用,也为应用和服务整合提供了可能。由于用户的各类应用所涉及的数据具有海量、异构、动态等特性,有效地管理和整合这些数据,并在保证数据安全和隐私的前提下提供数据融合和互操作功能需要数据密集型计算系统的支持。
  • 大型企业的商务智能应用:大型企业往往在地理上是跨区域分布的,互联网提供了统一管理和全局决策的平台。实现企业商务智能需要整合生产、销售、供应、服务、人事、财务等一系列子系统。数据是整合的对象之一,更是实现商务智能的基础。由于这些系统中的数据包括产品设计、生产过程以及计划、客户、订单、售前后服务等数据,除类型多样,数量巨大外,结构也是复杂、异构的。数据密集型计算系统是实现跨区域企业商务智能的支撑技术。
事件密集型

事件密集型应用是指需要处理大量事件或通知的应用程序。这类应用通常需要实时地接收、处理和响应大量事件或通知,例如传感器数据、日志消息、用户操作等。事件密集型应用可能包括实时监控系统、实时通信系统、消息队列系统等。
事件密集型应用通常需要高效地处理事件流,对事件的处理速度和实时性要求较高。这些应用可能需要使用事件驱动的架构和技术,来实时地捕获和处理事件,并触发相应的动作或响应。事件密集型应用的性能受到事件处理速度和系统响应时间的影响,需要采取合适的设计和优化策略,以确保应用程序能够高效处理大量事件并实时响应。

内存容量敏感型/内存容量约束型

内存容量敏感型应用是指对系统内存容量需求较高的应用程序。这些应用程序在运行时需要大量的内存来存储数据和执行操作,如大数据处理、复杂计算、机器学习等。如果系统内存不足,这些应用程序可能会运行缓慢或者无法正常工作。

内存延迟敏感型

对于内存延迟敏感型应用,内存访问延迟是一个重要的性能指标。减少延迟可以提高性能,但如果延迟高于预期,应用仍然可以运行,但可能会导致用户体验下降。较低的内存访问延迟可以提高应用程序的响应速度和性能表现。因此,在设计和优化这类应用程序时,需要考虑如何降低内存访问延迟,例如通过优化内存访问模式、使用高速内存、采用缓存技术等手段来提升性能。
这些应用程序在运行时需要频繁地读取和写入内存数据,并且对内存访问速度有较高的要求,即需要在较短的时间内获取到所需的数据。内存延迟敏感型应用通常包括实时数据处理、高性能计算、金融交易系统等。

延迟关键型应用

如果延迟超过一定的阈值,应用程序将无法正常运行或功能崩溃。延迟关键应用程序通常负责实时任务,例如支持自动驾驶汽车或控制机器对机器的进程。与延迟敏感型应用不同,超过响应延迟需求通常会导致应用程序失败。

内存带宽敏感型

内存带宽敏感型应用是指对内存带宽需求较高的应用程序。这些应用程序在运行时需要频繁地读取和写入内存中的数据,并且对内存带宽有较高的要求,即需要在较短的时间内传输大量的数据。内存带宽敏感型应用通常包括大规模数据处理、高性能计算、图形处理。较高的内存带宽可以提高应用程序的数据传输速度和整体性能。因此,在设计和优化这类应用程序时,需要考虑如何提高内存带宽,例如使用高速内存模块、增加内存通道数量、优化内存访问模式等技术来提升数据传输速度,从而满足应用程序对内存带宽的需求。

吞吐量敏感型

吞吐量敏感型应用是指对系统吞吐量需求较高的应用程序。系统吞吐量是指系统在单位时间内能够处理的数据量或任务数量,通常用来衡量系统的性能和效率。吞吐量敏感型应用通常需要在较短的时间内处理大量的数据或任务,如大规模数据处理、高性能计算、并行计算等。较高的吞吐量可以提高应用程序的处理速度和效率。因此,在设计和优化这类应用程序时,需要考虑如何提高系统的吞吐量,例如优化算法、并行计算、增加硬件资源等手段来提升系统处理能力,从而满足应用程序对吞吐量的需求。

传输速率、吞吐量、带宽的区别
传输速率是单位时间内的数据传输量;吞吐量是系统某一时刻传输速率;带宽是系统最大传输速率。

Q:内存密集型应用与容量敏感型、带宽敏感型、延迟敏感型应用的区别是什么?
内存密集型应用更关注对内存的整体使用,容量敏感型更侧重对内存容量的需求,而带宽敏感型和延迟敏感型应用更强调内存访问速度的重要性。

Q:数据密集型应用与内存密集型应用的区别是什么?

  • 数据密集型应用侧重于对大量数据的处理和分析,而内存密集型应用侧重于对内存资源的需求和管理;
  • 数据密集型应用可能需要处理大量的数据但并不一定需要大量的内存资源,而内存密集型应用可能需要大量内存资源来存储和操作数据,但不一定需要处理大规模的数据;

Q:带宽密集型和内存带宽敏感型应用的区别是什么?(仅从通常带宽密集型指网络带宽角度考虑)

  • 带宽密集型应用侧重于对外部网络带宽的需求,而内存带宽敏感型应用侧重于对系统内存带宽的需求;
  • 带宽密集型应用涉及数据传输和通信操作,而内存带宽敏感型应用涉及内存读写和数据访问操作;
  • 带宽密集型应用通常涉及与外部系统或网络的数据传输,而内存带宽敏感型应用涉及系统内部的内存访问和数据处理。

参考文献

专为内存密集型应用而优化的计划
网络密集型高网络带宽吞吐和包转发选择云服务器ECS实例规格攻略
面向带宽密集型应用:AGIB027R31B2I2VB、AGIB027R31B2I3V、AGIB027R29A1E2VB,SoC FPGA
Bandwidth_throttling
Data-intensive_computing
What is a data-intensive application?
What Are Data-Intensive Applications?
CPU密集型、数据密集型与IO密集型
边缘计算的100个术语
BREAKING THE LATENCY BARRIER

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计数据密集型应用 (DDIA) 是一本由Martin Kleppmann撰写的专业著作,它深入探讨了如何构建高效可扩展的数据系统和应用程序。这本书通过详细解析不同领域的实际案例,帮助读者了解数据密集型应用的核心原则和最佳实践。 在DDIA中,作者首先介绍了数据系统的核心概念,例如数据、一致性、可靠性和可扩展性。然后,他详细阐述了各种数据存储和处理技术,包括关系数据库、NoSQL数据库、消息队列、流处理等等。通过这些技术的比较和分析,读者可以了解它们的优缺点,并为自己的应用选择最合适的工具。 在第二部分,作者讨论了如何设计数据密集型应用的不同组件,包括数据复制和容错、数据分区和分片、数据一致性和并发控制。他提供了一些建议和模式,以帮助读者解决应用中的常见问题,例如数据冲突、性能瓶颈和容量规划。 最后,作者探讨了如何针对不同的应用场景选择合适的数据系统架构,包括关系数据库、键值存储、文档数据库和图形数据库。他还介绍了流处理和批处理的概念,并介绍了一些实现这些架构的工具和技术。 通过阅读DDIA,读者可以获得设计和构建数据密集型应用所需的全面知识。这本书不仅适合软件工程师和系统架构师,还适用于对数据系统和应用感兴趣的任何技术人员。无论是构建社交网络、大规模数据分析系统还是电子商务网站,DDIA都是一本不可或缺的参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值