Я экспериментировал с моим кодом для отправки «параллельных» команд на несколько последовательных COM-портов.Python Multiprocessing немного медленнее, чем многопоточность в Windows
Мой многопоточность Код состоит из:
global q
q = Queue()
devices = [0, 1, 2, 3]
for i in devices:
q.put(i)
cpus=cpu_count() #detect number of cores
logging.debug("Creating %d threads" % cpus)
for i in range(cpus):
t = Thread(name= 'DeviceThread_'+str(i), target=testFunc1)
t.daemon = True
t.start()
и код многопроцессорной обработки состоит из:
devices = [0, 1, 2, 3]
cpus=cpu_count() #detect number of cores
pool = Pool(cpus)
results = pool.map(multi_run_wrapper, devices)
Я наблюдаю, что задача отправки последовательных команд 4 COM портов «параллельно «занимает около 6 секунд, а многократная обработка всегда занимает от 0,5 до 1 секунды дополнительного времени работы.
Любые данные о причинах несоответствия на машине Windows?
У многопроцессорной обработки всегда есть дополнительные накладные расходы и многопоточность. Многопоточность использует то же пространство памяти, что и родительский процесс, тогда как для многопроцессорной обработки требуется выделить новую память для процесса. Там, вероятно, больше факторов, чем в игре, но эти накладные расходы являются заданными. –