InterProcessSemaphoreV2实现了一个跨jvm的信号量,主要工作原理是:acquire时创建一个临时顺序节点,如果创建成功且临时节点数小于等于maxLeases则说明信号量获取成功,否则wait等待,等待目录发生变化或计数改变时唤醒。整个acquire过程持InterProcessMutex互斥的,而因为其中带有等待,性能不会太高。实际使用时等待时间最好不要太长。
另外zk里面的通知可能会漏掉,所以有一定的可靠性的问题。
如果只传maxLeases进去,实际上计数不是共享的,可以使用ShardCountReader进行共享。
另外zk里面的通知可能会漏掉,所以有一定的可靠性的问题。
如果只传maxLeases进去,实际上计数不是共享的,可以使用ShardCountReader进行共享。