在我们的场景中,我们启动了多个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
服务器可以使用唯一ID来减少队列长度。如果已提交具有相同唯一ID的作业,则服务器可以将此请求附加到现有作业。这包括正在进行的作业,在这种情况下,非后台作业将发送与后台作业相同的结果。这通常称为“聚结”。
gearman protocol描述了唯一的id处理。
这是真的吗,如果gearman_client_do()中的唯一赋值为NULL,齿轮手将使用时间戳来区分不同的作业?
时间戳是队列中作业顺序的问题。 gearmand
将执行每个没有唯一ID的工作。另见implementation of gearman_client_do