【问题标题】:Coarse-grained vs fine-grained粗粒度与细粒度
【发布时间】:2010-09-22 06:33:02
【问题描述】:

粗粒度和细粒度有什么区别?

我在 Google 上搜索了这些术语,但找不到它们的含义。

【问题讨论】:

  • 我认为这个问题不够具体。这些术语不仅用于描述系统组件的粒度。它们还用于描述访问控制的粒度(可能还有更多用法......)。

标签: terminology granularity


【解决方案1】:

来自Wikipedia (granularity)

粒度是 系统被分解成小 部件,系统本身或其 描述或观察。它是 更大的实体在多大程度上 细分。例如,一个院子坏了 英寸的粒度比 院子碎成脚。

粗粒度系统包括 更少,更大的组件比 细粒度系统;粗粒度的 一个系统的描述考虑到大 细粒度的子组件 描述涉及较小的组件 其中较大的组成。

【讨论】:

    【解决方案2】:

    简单来说

    • 粗粒度 - 比细粒度的大型子组件更大的组件。简单地将一个或多个细粒度的服务包装成一个更粗粒度的操作。
    • 细粒度 - 由较大组件组成的较小组件,较低级别的服务

    最好有更多粗粒度的服务操作,由细粒度的操作组成

    【讨论】:

      【解决方案3】:

      粗粒度:一些对象包含大量相关数据,这就是服务具有更广泛功能范围的原因。示例:单个“帐户”对象包含客户姓名、地址、帐户余额、开户日期、最后更改日期等。 因此:增加了设计复杂性,减少了用于各种操作的单元数

      细粒度:更多的对象每个都持有更少的数据,这就是服务的功能范围更窄的原因。示例:Account 对象保存余额,Customer 对象保存姓名和地址,AccountOpenings 对象保存开户日期等。 因此:降低了设计复杂性,增加了各种服务操作的单元数。 这些是在这些对象之间定义的关系。

      【讨论】:

      【解决方案4】:

      另一种理解方式是考虑进程和线程之间的通信。进程在粗粒度通信机制的帮助下进行通信,如套接字、信号处理程序、共享内存、信号量和文件。另一方面,线程可以访问属于进程的共享内存空间,这允许它们应用更细粒度的通信机制。

      来源:Java 并发实践

      【讨论】:

        【解决方案5】:

        在服务的上下文中:

        http://en.wikipedia.org/wiki/Service_Granularity_Principle

        根据定义,粗粒度的服务操作范围更广 比细粒度的服务,尽管这些条款是相对的。这 前者通常需要增加设计复杂性,但可以减少 完成一项任务所需的调用次数。

        细粒度的服务接口与聊天接口大致相同。

        【讨论】:

          【解决方案6】:

          就文本文件这样的数据集而言,粗粒度意味着我们可以转换整个数据集,但不能转换数据集上的单个元素,而细粒度意味着我们可以转换数据集上的单个元素。

          【讨论】:

            【解决方案7】:

            粗粒度和细粒度都考虑优化一些服务。但区别在于水平。我喜欢用一个例子来解释,你会很容易理解的。

            细粒度:比如我有findbyId、findbyCategry、findbyName……等100个服务。为什么我们不能提供 find(id, category, name....等等) 而不是那么多服务。所以这样我们可以减少服务。这只是一个例子,但目标是如何优化服务的数量。

            粗粒度:例如,我有 100 个客户端,每个客户端都有自己的一组 100 项服务。所以我必须提供 100*100 的总服务。这是非常困难的。我所做的不是那样,而是将适用于大多数客户端的所有常见服务标识为一个服务集并单独保留。例如,在 100 个服务中,50 个服务是常见的。所以我只需要管理 100*50 + 50。

            【讨论】:

              【解决方案8】:

              粗粒度的粒度并不总是意味着更大的组件,如果按照粗的字面意思去理解,它的意思是粗糙或不合适。例如在软件项目管理中,如果您将一个小系统分解为几个组件,这些组件大小相等,但复杂性和功能各不相同,这可能会导致粗粒度。相反,对于细粒度细分,您可以根据每个组件提供的功能的内聚性来划分组件。

              【讨论】:

                【解决方案9】:

                粗粒度和细粒度。这两种模式都定义了内核的共享方式 在多个 Spark 任务之间。顾名思义,细粒度模式是 负责在更细粒度的级别上共享内核。 细粒度模式已被 Spark 弃用,很快将被移除。

                【讨论】:

                  【解决方案10】:

                  与细粒度服务相比,Corse 粒度服务提供更广泛的功能。根据业务领域,可以创建单个服务来为单个业务单元提供服务,或者如果子单元在很大程度上相互独立,则可以创建专门的多个细粒度服务。 粗粒度服务可能会变得更加困难,可能由于其大小而难以适应变化,而细粒度服务可能会引入管理多个服务的额外复杂性。

                  【讨论】:

                    【解决方案11】:

                    在存储空间非常重要的大规模数据时,粒度有一个重要的应用。

                    根据牛津词典,粒度的意思是-

                    “一组数据的规模或详细程度。”

                    根据剑桥词典 -

                    “信息中包含很多小细节,让您可以非常清楚地了解正在发生的事情”

                    所以从这个词的具体含义来看,它是一种连续过程的数据分区。

                    更细的粒度由小区间划分组成,从而可以实现详细的表示。 另一方面,粗粒度是较大的帧间隔,这样可以节省存储空间。

                    两种粒度的使用是特定于应用程序的。

                    例如-如果我们有一个应用程序,其中最近的时间信息比旧的信息更重要。对于近期数据的详细表示可以通过细粒度找到,而对于旧数据表示我们可以使用更粗粒度

                    【讨论】:

                      猜你喜欢
                      • 2016-05-23
                      • 2014-11-29
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-04-24
                      • 1970-01-01
                      • 2012-02-20
                      • 2012-09-05
                      • 2023-04-11
                      相关资源
                      最近更新 更多