воскресенье, 10 февраля 2013 г.

что такое процесс и поток?

Сайт веб-разработчика. Автор проекта Колтышев Павел © 2009-2013

p = EmailMessage(email, 'Hello world!')

emails = ['bobby@gmail.com', 'mikki@gmail.com', 'frank@gmail.com']

print "Send message from %s" % self.email

super(EmailMessage, self).__init__()

def __init__(self, email, msg):

class EmailMessage(multiprocessing.Process):

Многопоточность лучше всего использовать при написании логики с множеством операции ввода-вывода. Программный код с многочисленными вычислениями не имеет смысл переносить на многопоточность, это плачевно скажется на производительности программы. Большой объем вычислений в программном коде лучше всего реализовать в несколько процессов, обеспечив их взаимодействие с помощью механизма обмена сообщений.

В Python существует глобальная блокировка интерпретатора Global Interpreter Lock (GIL). Из-за доступа к переменным интерпретатора, GIL вынуждена блокировать потоки и фактически одновременно будет выполняться только один поток. Лишь при блокирующих операциях, таких как ввод-вывод у других потоков есть шанс перехватить эстафету на выполнение.

При параллельном выполнении задач, возникает проблема доступа к совместно используемым данным. Попытка изменить некоторые данные одновременно из нескольких потоков может привести к их повреждению и нарушению целостности состояния программы. Для решения этой проблемы необходимо выделить критический участок программного кода, в котором осуществляется доступ к данным и обеспечить его выполнение под защитой взаимоисключающих блокировок.

Создавать новые потоки целесообразно, когда необходимо реализовать одновременное выполнение нескольких задач и имеется значительный объем данных, которые должны быть доступны всем потокам.

Вместо запуска новых процессов, можно создать новые потоки в текущем процессе. Такие потоки будут выполнять собственные последовательности инструкций, иметь свой стек вызова функций, а также иметь доступ к данным и системным ресурсам выделяемым процессу.

Также существует и другие механизмы, например отображаемые области памяти (модуль mmap). Этот метод основан на использовании разделяемых областей памяти, доступных всем процессам.

Для обмена информацией между процессами нужно использовать механизмы взаимодействия процессов IPC (Inter-Process Communication). Одним из таких механизмов является — обмен сообщениями. Сообщение — это простой буфер двоичных байтов передаваемых через каналы ввода-вывода, по средством операций send() и recv().

Программа может создавать новые процессы, называемые — дочерними. Дочерние процессы являются независимыми и изолированными друг от друга. У процесса существует флаг, говорящий о том, является ли процесс демоническим. Демонический процесс автоматически завершается вместе с процессом создавшим его, кроме того демонические процессы не могут создавать дочерних.

Процесс содержит информацию об объеме занимаемой оперативной памяти, списке открытых файлов, программный счетчик ссылающийся на выполняемую инструкцию, стек вызовов используемый для хранения локальных переменных функции.

Запущенная на Python программа называется процессом. Процесс при запуске содержит один единственный поток, который обычно называют главным потоком процесса. Поток последовательно выполняет инструкции программного кода.

Процессы и потоки в Python

Процессы и потоки в Python

Комментариев нет:

Отправить комментарий