在上述代码中,waitForCondition 函数通过轮询方式检查条件是否满足。当条件满足时,才继续执行下去。
但是这种轮训的方式其实存在一些缺点,首先是资源浪费,轮询会消耗大量的 CPU 资源,因为协程需要不断地执行循环来检查条件。这会导致 CPU 使用率升高,浪费系统资源,其次是延迟,轮询方式无法及时响应条件的变化。如果条件在循环的某个时间点满足,但轮询检查的时机未到,则会延迟对条件的响应。最后轮询方式可能导致协程的执行效率降低。因为协程需要在循环中不断检查条件,无法进行其他有意义的工作。
既然通过轮训一个条件变量来实现同步操作存在这些问题。那go语言中,是否存在更好的实现方式,可以避免轮询方式带来的问题,提供更高效、及时响应的同步机制。其实是有的,sync.Cond 和channel便是两个可以实现同步操作的原语。
3.实现方式