(обратите внимание, что весь этот вопрос, хотя решение parrallel программирования, в основном оформлен в контексте/приложения питона 3.X)Разъяснения различий между параллельными потоками/процессами
На данный момент, я собираю от чтения является то, что:
a процесс, представляет собой набор инструкций вместе со всеми ресурсами, которые сопровождают его во время его работы. Он будет включать следующий код, а также входной/выходной/ресурс/память/дескриптор файла/etc. Другими словами, вся его кухня раковина.
# this script, while running as a whole, is considered a process
print('hello world')
with open('something.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')
print('job done!')
Однако, если бы я хотел сделать больше в том же количестве времени - для того, чтобы максимизировать свои компьютеры перерабатывающие мощности - У меня есть возможность порождать больше процессов или потоков. Какой из них я выбираю, по сравнению с простой аналогией процесса скрипта python выше, какими они будут? Создает ли другой процесс эквивалент просто повторения всего объекта при изменении имени файла?
# changed filename (is this "another process?")
print('hello world')
with open('something_else.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')
print('job done!')
Я также получить смутное представление о том, что один процесс может содержать несколько потоков, что это просто эквивалент загрузки кучи более «концептуальный» для петель тогда?
# like would this be a "thread" a barebones "subset" of an entire program?
with open('something.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')
Каким образом эти два действительно отличаются друг от друга в любом случае? Поиск в Интернете Я понимаю, что процессы более независимы и тяжеловесны, а потоки более легкие и «легче обмениваются памятью друг с другом». Но что это значит? Почему процессы, связанные с обработкой, совместно используют память друг с другом? И если потоки могут «обмениваться памятью», то почему я не могу получить доступ к различным переменным из разных потоков, которые порождаются из одного и того же сценария (например, from thread_a import var_data
)
И наконец, что именно вычисляет? Процессор вычисляет потоки или процессы? Или это всеобъемлющий термин, охватывающий несколько ядер/и т. Д. Нужно ли вычислять процессы или потоки ядра?
Резюме:
1) Используя простой питон скрипт в качестве примера для процесса, что бы эквивалент нерест другой процесс/нить будет? (например, дублировать сценарий/подмножество скрипта/только часть кода)
2) как процессы принципиально отличаются от потоков, что является примером процессов, способных делать то, что потоки не могут?
3) почему память/данные часто описываются как «труднее поделиться» в процессах, чем потоки? и как потоки обмениваются данными в любом случае?
4) Рассчитывают ли процессоры потоки или процессы. У сердечников вычисления потоков или процессов
5) Каковы некоторые общие рекомендации/примеры, когда использовать то, что
Я хотел бы узнать больше о тонких нюансах потоков/процессов и более подробных механизмах их совместного использования ресурсами. Куда я могу пойти, чтобы узнать это? Будет ли это в рамках вводного курса ОС или параллельного программирования? Любые рекомендуемые материалы? (с фокусом на python, конечно) также, что, если бы у меня было 2 ядра, не было бы двух потоков, которые бы были ACTUALLly параллельно? – AlanSTACK
Темы в Python никогда не являются параллельными, даже если у вас несколько ядер. Я думаю, вы должны пойти на параллельный курс программирования, а не на курс OS. И Threads, и Process не очень сложно начать, и тогда все зависит от вашего приложения. Вы можете найти много документации [здесь] (http://sebastianraschka.com/Articles/2014_multiprocessing_intro.html), [здесь] (https://pymotw.com/2/multiprocessing/communication.html), [здесь] (http://eli.thegreenplace.net/2012/01/04/shared-counter-with-pythons-multiprocessing). – CoMartel
Вы должны действительно определить простое приложение и протестировать его с помощью Threads and Process. Если у вас есть вопрос о конкретном приложении и какой метод будет работать лучше, задайте другой вопрос об этом конкретном случае. – CoMartel