optimize: don't need to fix balance while searching
optimize: use spinwait, supposing there are enough cores