How does ThreadPoolExecutor().map differ from ThreadPoolExecutor().submit? How does ThreadPoolExecutor().map differ from ThreadPoolExecutor().submit? multithreading multithreading