You can use zillions of buffers, it won't eliminate the problem. When you render, you want to render the least state of your world. This typically gives the well-known input->update->render cycle, which makes sense, exactly in that order.
Input will modify the world's state. And rendering is dependent on the world state. So each step is basically waiting for the previous one to complete. In multi-threading language, this means synchronization, and that again means you lose nearly all advantages of multi-threading and get a lot of trouble.