Почему я должен использовать поток по сравнению с использованием процесса?

Извините, у меня нет java, поэтому я просто пробую некоторые методы в python и могу получить желаемый результат, который вы хотите. Надеюсь, это поможет вам.

import cv2
import numpy as np

image = cv2.imread("1.png")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

_,thresh = cv2.threshold(gray,100,255,cv2.THRESH_BINARY)
cv2.imshow("thresh",thresh)

blur = cv2.GaussianBlur(gray,(5,5),0)
ret3,otsu = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow("otsu",otsu)

adaptive_thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 29, 30)
cv2.imshow("adaptive_thresh",adaptive_thresh)

cv2.imshow("img",image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • Метод Оцу

enter image description here

  • Фиксированный двоичный порог

enter image description here

  • Адаптивный порог

enter image description here

43
задан Sebastian Simon 2 August 2016 в 01:21
поделиться

5 ответов

Далеко от преимуществ использования потока по процессу, как:

Преимущества:

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

, Рассматривают немного недостатков также:

  • Никакая безопасность между потоками.
  • Один поток может топать на данных другого потока.
  • , Если блоки потока, все потоки в блоке задачи.

относительно важной части Вашего вопроса, "Когда я должен использовать поток?"

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

  • Выполнение долгой обработки: Когда приложение Windows вычисляет, оно не может больше обрабатывать сообщения. В результате дисплей не может быть обновлен.
  • Выполнение фоновой обработки: Некоторые задачи не могут быть строго ограничены во времени, но должны выполняться непрерывно.
  • Выполнение работы ввода-вывода: ввод-вывод к диску или объединяться в сеть может иметь непредсказуемые задержки. Потоки позволяют Вам удостоверяться, что задержка ввода-вывода не задерживает несвязанные части Вашего приложения.
34
ответ дан Baishampayan Ghose 26 November 2019 в 22:32
поделиться

Вы предпочли бы несколько потоков по нескольким процессам по двум причинам:

  1. коммуникация Межпотока (обменивающийся данными и т.д.) значительно более проста к программе, чем межпроцессное взаимодействие.
  2. Контекстные переключения между потоками быстрее, чем между процессами. Таким образом, это более быстро для ОС, чтобы остановить один поток и начать выполнять другого, чем делают то же с двумя процессами.

Пример:

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

73
ответ дан Frederick The Fool 26 November 2019 в 22:32
поделиться

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

Использование процесса означает, что Вам также нужна Коммуникация процесса Интера (IPC) для вкладывания данных и из процесса. Это - хорошая вещь, если процесс должен быть изолирован все же.

6
ответ дан BenB 26 November 2019 в 22:32
поделиться

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

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

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

6
ответ дан flodin 26 November 2019 в 22:32
поделиться

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

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

2
ответ дан 26 November 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: