粗粒和细粒

粗粒和细粒之间有什么区别?

我在Google上search了这些条款,但是我找不到他们的意思。

从维基百科(粒度) :

粒度是系统分解成小部分的程度,系统本身或其描述或观察。 这是一个更大的实体细分的程度。 例如,一个被分成几英寸的院子比一个院子碎成一个脚的颗粒更细。

粗粒系统由比细粒系统更less,更大的组件组成; 一个系统的粗粒度的描述是关于大的子组件的,而细粒度的描述是关于较大的组件的较小的组件。

简单来说

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

更细粒度的服务操作是更好的

在这里输入图像说明

粗粒度:有些项目持有大量相关数据,这就是为什么服务在function上有更广泛的范围。 示例:单个“账户”对象包含客户名称,地址,账户余额,开户date,上次更改date等。 因此:增加了devise复杂性,减less了对各种操作的单元数量

细粒度:每个持有更less数据的对象越多,这就是为什么服务的function范围更窄。 例如:一个Account对象保持平衡,一个Customer对象保存名称和地址,一个AccountOpenings对象保存开始date等。 因此:devise复杂度降低,单元数量增加到各种服务操作。 这些是在这些对象之间定义的关系。

在服务方面:

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

根据定义,粗粒度服务操作的范围比细粒度服务的范围更广,尽pipe术语是相对的。 前者通常需要增加devise复杂度,但可以减less完成任务所需的呼叫数量。

一个细粒度的服务接口大致与chatty接口相同。

还有一种理解的方法是从stream程和线程之间的沟通来考虑。 进程通过粗粒度通信机制(如套接字,信号处理程序,共享内存,信号量和文件)进行通信。 另一方面,线程可以访问属于一个进程的共享内存空间,这使得他们可以应用更细粒度的通信机制。

来源:实践中的Java并发

粗粒度的粒度并不总是意味着更大的成分,如果按字面意思粗略的意思,它意味着苛刻或不合适。 例如,在软件项目pipe理中,如果将一个小型系统分解为几个大小相等,但复杂性和特征各不相同的组件,则可能导致粗粒度粒度。 相反,对于细粒度的细分,您可以根据组件提供的function的凝聚力来划分组件。

粗粒和细粒。 这两种模式都定义了如何在多个Spark任务之间共享内核。 顾名思义,细粒度模式负责更细粒度地共享内核。 细粒度模式已被Spark弃用,并且很快将被删除。