Parallel test execution on multiple real devices (Appium Java)

Please advice. This question was asked quite a lot. I found different approaches: using ThreadPoolExecutor, Selenium Grid + Docker …

But I want to know which option is the best if someone had already experience with it.
And should I install Ubuntu instead of Windows for this?