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