齿轮工如何区分两份工作?

时间:2018-06-09 01:29:31

标签: c++ c gearman

在我们的场景中,我们启动了多个gearman服务器,并使用多个线程为工作人员分配作业。在以下API函数中,unique参数的默认值为NULL

void *gearman_client_do(gearman_client_st *client, const char *function_name, const char *unique, const void *workload, size_t workload_size, size_t *result_size, gearman_return_t *ret_ptr);

所以我们在这里观察到的是,如果同时分配两个作业,那么齿轮机服务器就会搞砸这两个作业。无论哪个工作早些时候完成,都将作为两个工作的结果返回。

这是真的吗,如果unique中的gearman_client_do()被分配到NULL,齿轮工将使用时间戳来区分不同的工作?

编辑:输入gearman_client_do

1 个答案:

答案 0 :(得分:0)

  

服务器可以使用唯一ID来减少队列长度。如果一个   已经提交了具有相同唯一ID的作业,服务器可以   将此请求附加到现有作业。这包括工作   已经在进行中,在这种情况下将发送非后台作业   与后台作业相同的结果。这通常被称为   "聚结"

gearman protocol对唯一ID处理的描述。

  

这是真的,那个齿轮工将使用时间戳来区分   如果指定了gearman_client_do()中的唯一,则执行不同的作业   NULL?

时间戳是队列中作业顺序的问题。 gearmand将执行每个作业而没有唯一ID。 另请参阅implementation of gearman_client_do