Почему двум потокам Python требуется меньше времени по сравнению с двумя подоболочками для выполнения двух копий программы на Си? - PullRequest
0 голосов
/ 24 июня 2019

Я хочу выполнить три независимых копии программы на C (c_prog.exe), которая читает из входного файла (input.dat) одновременно на трех ядрах обработки.Я не хочу, чтобы они что-то делились;особенно, входной файл.

Для этой цели я выделил один из двух четырехъядерных процессоров на своем компьютере с помощью Linux cset shield (Обратите внимание: каждый четырехъядерный процессор имеет свой собственный двухуровневый кэшиерархия. L2 распределяется между 4 ядрами, а L1 является частным. Межпроцессорное взаимодействие осуществляется через CCI).

Я заметил, что скрипт Python завершает выполнение значительно быстрее (я записал время до запуска потоков и послезавершение темы), чем три копии c_prog.exe на трех разных терминалах Linux.Значит ли это, что потоки Python все еще что-то делят?Если да, не могли бы вы указать, что наиболее вероятно разделяется между этими потоками?

В моем понимании, три потока Python, безусловно, не делят свои стеки, счетчики программ и регистры.Так как используется функция os.system (), три копии c_prog.exe должны выполняться на трех независимых субоболочках вне экранированных ядер.Однако, используя htop, я подтвердил, что подоболочки создаются внутри процессоров щита.Поэтому я не понимаю, что происходит.

#!/usr/bin/python

import threading
import os

semaphore = threading.Semaphore(3)

def run_command(cmd):
    with semaphore:
    os.system(cmd)

for i in range(3):
    threading.Thread(target=run_command, args=("./c_prog.exe input.dat", )).start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...