粗粒度和细粒度的区别是什么?
我在谷歌上搜索了这些词汇,但是我找不到它们的含义。
来自 Wikipedia (粒度):
粒度是指 系统被分解成小的 部分,无论是系统本身或其 描述或观察 一个较大的实体在多大程度上 细分。例如,一码破碎 成英寸的粒度比 折成脚的院子。 粗粒度系统包括 更少,更大的组成部分 细粒度的系统; 粗粒度的 系统的描述 子组件,而细粒度 描述涉及较小的组件 其中较大的是组成。
粒度是指 系统被分解成小的 部分,无论是系统本身或其 描述或观察 一个较大的实体在多大程度上 细分。例如,一码破碎 成英寸的粒度比 折成脚的院子。
粗粒度系统包括 更少,更大的组成部分 细粒度的系统; 粗粒度的 系统的描述 子组件,而细粒度 描述涉及较小的组件 其中较大的是组成。
在服务方面:
Http://en.wikipedia.org/wiki/service_granularity_principle
根据定义,粗粒度服务操作的范围更广 而不是细粒度的服务,尽管条款是相对的 前者通常需要增加设计的复杂性,但可以减少 完成一项任务所需的调用次数。
细粒度的服务接口与聊天接口大致相同。
另一种理解方法是从进程和线程之间通信的角度进行思考。进程通过粗粒度通信机制(如套接字、信号处理程序、共享内存、信号量和文件)进行通信。另一方面,线程可以访问属于进程的共享内存空间,这允许它们应用更精细的粒度通信机制。
来源: 实践中的 Java 并发
简单来说
最好有更多的粗粒度服务操作,这些操作由细粒度操作组成
粗粒度并不总是意味着更大的组件,如果字面意思是粗糙,它意味着粗糙,或不适当。例如:。在软件项目管理中,如果您将一个小型系统分解为几个组件,这些组件的大小相同,但是复杂性和特性不同,这可能导致粗粒度。相反,对于细粒度分解,您将根据每个组件提供的功能的内聚性划分组件。
粗粒度: 少数对象包含大量相关数据,这就是为什么服务具有更广泛的功能范围。示例: 一个“ Account”对象保存客户名称、地址、帐户余额、开业日期、最后更改日期等。 因此: 增加了设计的复杂性,减少了各种操作的单元数量
细粒度: 更多的对象,每个对象拥有更少的数据,这就是为什么服务的功能范围更窄的原因。示例: Account 对象保持平衡,Customer 对象保持名称和地址,AccountOpenings 对象保持开始日期,等等。 因此: 降低了设计复杂度,增加了各种服务操作的单元数量。 这些是这些对象之间定义的关系。
粗粒度和细粒度。这两种模式都定义了如何共享内核 在多个 Spark 任务之间。顾名思义,细粒度模式是 负责在更细粒度级别上共享核心。 细粒度模式已被星火弃用,将很快被移除。
对于像文本文件这样的数据集,粗粒度意味着我们可以对整个数据集进行转换,但不能对数据集上的单个元素进行转换。而细粒度意味着我们可以对数据集上的单个元素进行转换。
粗粒度和细粒度都考虑优化许多服务。但不同之处在于水平。我喜欢用一个例子来解释,你会很容易理解。
细粒度 : 例如,我有100个服务,比如 findbyId、 findbyCategry、 findbyName... ..。等等。为什么我们不能提供 find (id、分类、名称... ... 等等) ,而不是那么多服务。这样我们就可以减少服务。这只是一个例子,但目标是如何优化服务的数量。
粗粒度 : 例如,我有100个客户端,每个客户端都有自己的100个服务集。所以我必须提供100 * 100总服务。这是非常困难的。我所做的不是这样,而是将适用于大多数客户机的所有公共服务标识为一个服务集,并分别保留。例如,在100个服务中,有50个服务是常见的。所以我只能管理100 * 50 + 50。
与细粒度服务相比,核心粒度服务提供了更广泛的功能。根据业务领域的不同,可以创建单个服务来为单个业务单元服务,或者如果子单元之间基本上相互独立,则可以创建专门的多个细粒度服务。 粗粒度服务可能变得更加困难,可能由于其大小而不能适应变化,而细粒度服务可能引入管理多个服务的额外复杂性。
粒度在存储空间非常重要的大规模数据时有一个重要的应用。
根据 牛津字典的粒度的含义是-
一组数据中细节的范围或程度
根据 剑桥字典-
信息中包含很多小细节,使你能够非常清楚地理解正在发生的事情
所以从词的具体含义来看,它是连续过程的某种数据分割。
更细的粒度 由小的区间划分组成,因此可以实现详细的表示。 另一方面,粒度较粗的颗粒帧间隔较大,可以节省存储空间。
两种粒度类型的使用是特定于应用程序的。
例如-如果我们有一个应用程序,其中最近的时间信息比旧的信息更重要。对于最近的数据的详细表示可以通过 更细的粒度找到,而对于较旧的数据表示,我们可以使用 粒度较粗的颗粒。