|
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 128
|
|
В каких случаях удобнее использовать processes , в каких удобнее threads?12.10.2019, 17:57. Показов 3076. Ответов 21
Привет! Экзаменационный вопрос:
show a real case example in which you would choose processes, and another in which you would choose threads --------------------------------------------------------------------------------------------------------------------------------------------- Например, в каком случае я выберу threads - веб сервер. Сервер принимает тысячи запросов в секунду и чтобы всех их обслужить он создает threads, таким образом сервер не тупит, успевает обрабатывать все запросы. А вот в каких случаях удобнее и предпочтительнее использовать processess. Напишите, пожалуйста, реальные примеры с жизни + объяснение. ++ если есть, что добавить к threads - добавляйте! Век живи, век учись.
0
|
|
| 12.10.2019, 17:57 | |
|
Ответы с готовыми решениями:
21
В каких случаях использовать обращение self::, а в каких $this. В чём разница между ними? В каких случаях необходимо использовать equals, а в каких == В каких случаях надо создавать индексы к полям, а в каких - нет? |
|
|
|
| 12.10.2019, 18:38 | |
|
https://www.cyberforum.ru/blogs/18334/blog310.html там по сути полезным является только пример с процессами
3
|
|
|
2 / 2 / 0
Регистрация: 08.10.2019
Сообщений: 11
|
|
| 12.10.2019, 18:38 | |
|
У потоков общие ресурсы и общая область памяти, а у процессов нет.
1
|
|
|
2734 / 888 / 331
Регистрация: 10.02.2018
Сообщений: 2,099
|
|
| 12.10.2019, 19:34 | |
|
Про процессы.
Если нужно обеспечить отказоустойчивость или изолированность. Разрушение одного процесса не приводит к разрушению другого. Например, софт обеспечивает вещание нескольких медиа-каналов по сети. Он состоит из одного центрального менеджера, который запускает каждый канал в отдельном процессе и следит за его работой. Критический сбой в любом из процессов не приводит к фатальному сбою в центральном менеджере и может быть программно обработан. Есть небольшие уже готовые консольные утилиты. Иногда необходимо использовать их как есть, в виде отдельного процесса. Программа запускает эти утилиты, передаёт задание в командной строке и каким-либо способом забирает результат работы. Интеграция таких утилит в тело другого приложения может быть невозможна или затруднительна. Различные распределенные системы: клиент-серверые, облака или распределённые по нескольким компам вычисления. Тут в принципе нет варианта выполнить подобное в виде потоков. Добавлено через 4 минуты Ещё вспомнил экзотик из жизни. Была закрытая библиотека, которая способна работать только в 32х битном режиме. Нужно было прикрутить её к 64х битному процессу. Что бы сделать подобное пришлось запустить отдельный 32х битный процесс, который работал с этой библиотекой. А 64х битный процесс уже работал с 32х битным процессом.
2
|
|
|
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 128
|
|
| 12.10.2019, 19:59 [ТС] | |
|
Ygg, Alexei55555, Evg,
Спасибо! А мой пример с threads - правильный ? Или еще могу что-то добавить в деталях. Заранее Спасибо!
0
|
|
|
|
|||
| 12.10.2019, 20:19 | |||
|
Если по-настоящему, то надо спрашивать специалистов. У web-сервера очень короткий сеанс: получил соединение, выплюнул данные и завершил работу. В таких условиях, возможно, без потоков будет работать быстрее. Но в современном web'е уже может быть всё и не так просто Добавлено через 2 минуты
1
|
|||
|
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 128
|
|
| 12.10.2019, 20:33 [ТС] | |
|
Часть текста с книги Operating Systems by Silberschatz.
It is generally more efficient to use one process that contains multiple threads. If the web-server process is multithreaded, the server will create a separate thread that listens for client requests. When a request is made, rather than creating another process, the server creates a new thread to service the request and resume listening for additional requests. --------------------------------------------------------------------------------------------------------------------------- Я только начал изучать эти вопросы. Уважаемые форумчане, правильно ли тут написано ? С уважением. Добавлено через 1 минуту + а ядро операционной системы использует threads ? могу ли я так же включить его в свой вопрос?
0
|
|
|
|
||
| 12.10.2019, 20:47 | ||
|
Здесь сказано, что после получения запроса от клиента, создаётся отдельный поток, который этот запрос обработает и выплюнет ответ клиенту (to service the request). Вероятно, подразумевается, что сам процесс исполнения запроса является длительным, т.е. непосредственное время обработки запроса сильно превышает время, требуемое на создание потока. В каком-то смысле это помогает "не тупить и успевать обрабатывать запросы"
Т.е. я понял, что тут имел в виду автор, но по простому объяснить это сложно. Но совсем вкратце - так сделано НЕ для того, как я это писал в конце поста #6. А именно ради того, чтобы не тупить. В ссылке из поста #2 почитай раздел 2.2. Здесь необходимость вынесения работы в поток продиктована примерно такими же соображениями Добавлено через 2 минуты
1
|
||
|
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 128
|
|
| 12.10.2019, 21:04 [ТС] | |
|
Finally, most operating-system kernels are now multithreaded. Several
threads operate in the kernel, and each thread performs a specific task, such as managing devices, managing memory, or interrupt handling. For example, Solaris has a set of threads in the kernel specifically for interrupt handling; Linux uses a kernel thread for managing the amount of free memory in the system. Опять-таки та же книга. Я прочитал ваш FAQ, но ничего не понял. Если не трудно, тут можете написать самые тривиальные примеры, когда предпочтительнее использовать threads, а когда processes. Если не составит труда напишите тут, пожалуйста. Если да - благодарен вам за попытки мне помочь.
0
|
|
|
|
|||
| 12.10.2019, 21:33 | |||
|
1
|
|||
|
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 128
|
|
| 12.10.2019, 21:41 [ТС] | |
|
Ygg, Уважаемый.
Ваш пример про софт , который вещает каналы. Например может ли это быть программа для IPTV ? Например сама программа когда запускается - она и является процессом+ а ещё когда мы хотим смотреть HBO TV например, чтобы мы могли смотреть этот канал , программа создаёт новый процесс , чтобы показывать нам данный канал ? И даже если ошибка в трансляции идёт от сервера HBO , данный процесс запустивший Канал для просмотра hbo можно закрыть (то есть нажав на крестик) и данная проблема в трансляции никак не перейдёт на главный процесс , так так процессы изолированы друг от друга ?
0
|
|
|
2734 / 888 / 331
Регистрация: 10.02.2018
Сообщений: 2,099
|
||
| 12.10.2019, 22:05 | ||
|
Потоки и процессы - это не совсем взаимозаменяемые вещи, они различны по своей сути. Если можно использовать потоки, то используются потоки. Процессы используются, когда нельзя использовать потоки. Потоки. Тактовая частота процессора (ядра) ограничена, но ядер может быть несколько. Если задача для своего решения требует миллиарда простых операций, то при выполнении на одном ядре решение займёт некоторое фиксированное время. Если же разбить задачу на несколько независимых частей и каждую часть выполнять на своём ядре, то время можно сократить в столько раз, сколько задействовано ядер. Есть, например, алгоритмы сортировки, которые построены на разбивании данных и сортировки каждой части в отдельном потоке с последующим слиянием результатов. Алгоритмы кодирования видео активно используют разделение картинки на части и параллельный обсчёт каждой части. Оконные программы требуют постоянного контроля действий пользователя: движение мышью, нажатие кнопок клавиатуры, перерисовка окна. Если вдруг нужно выполнить какую-то очень длительную операцию, то лучше не делать этого в интерфейсном потоке, так как программа надолго "повиснет". В таком случае длительную задачу запускают в отдельном потоке, а интерфейсный поток используют для отображения прогресса и взаимодействия с пользователем. Некоторые задачи можно разбить на части, но нельзя распараллелить. Каждая следующая часть требует результатов полученных предыдущей частью. Если такие задачи подразумевают потоковую обработку данных (новые данные постоянно поступают для обработки), то можно организовать конвейер. Все части задачи будут выполняться последовательно, но каждая в своём потоке. Это позволяет параллельно выполнять первую часть для новых данных, вторую часть для предыдущих данных и т.д. Многие медиа-плееры построены на данном принципе. Одна часть читает файлы, вторая декодирует, третья как-то обрабатывает, четвёртая выводит на экран.
0
|
||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||
| 12.10.2019, 22:49 | ||
Сообщение было отмечено robben_55 как решение
РешениеПо поводу IPTV я не знаю, но как минимум всё идет по протоколу UDP - это когда нет постоянного подтверждения между клиентом и сервером о успешности доставки пакета. Например в TCP когда клиент не принял пакет, он направляет серверу уведомление об этом, и сервер заново высылает пропущенные пакеты, и так же со стороны сервера, если подтверждение от клиента не пришло, то он опять же заново высылает пакеты. Вот в таком виде соединений, лучше использовать процессы. А потоки используют для ускорений вычислений и для работы с общей памятью, когда потоку нет смысла жить отдельно от процесса и это по сути одно целое, только разбитое по ядрам ЦП. Добавлено через 6 минут Кстати, Google chrome, насколько мне известно, на каждую вкладку создает отдельный процесс, как раз для того, что бы не убивать весь браузер или он не тормозил, когда одна из вкладок подвисла
0
|
||
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
||||||
| 13.10.2019, 14:43 | ||||||
|
Апач, напр. испльзует отдельные процессы на Линуксе и потоки на Венде для каждого соединения. Это его делает тормозным. Нджинкс, напротив, использует один мастер-процесс для всех соединений и быстро передает его на обработку рабочим процессам (обычно по количеству ядер).
1
|
||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 13.10.2019, 15:02 | |
|
gng,
Решения с потоками по идее должно быть в целом шустрее чем решение с процессами и в линуксе тоже. Например при переключении контекста если с одного ядра слезет задача сервера, и на это же ядро залезет другая задача этого же сервера, то в случае с процессами будут страдать кеши, а с потоками такой проблемы нет потому что память то одна. А у процессов - каждому отдельный участок памяти. Но с процессами иногда надежнее. Насчёт нгинкс они вроде отказались от мастер процесса который раздаёт соединения на обработку, вместо этого каждый процесс теперь может принимать соединения (каждый процесс садится на одинаковый порт за счёт so_reuseport)
1
|
|
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
||
| 13.10.2019, 15:19 | ||
|
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 13.10.2019, 15:25 | |
|
gng,
Ок, не за что. https://m.habr.com/ru/post/259403/ Если интересно тут подробно расписано, с какой версии это работает. Бенчмарки тоже есть
0
|
|
|
|
||
| 13.10.2019, 15:39 | ||
|
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 13.10.2019, 15:53 | |
|
Evg,
ну зависит от того как вообще организованы данные. наличие маллок ведь != разная память множество потоков вполне себе может использовать один и тот же пул
0
|
|
|
|
||
| 13.10.2019, 16:08 | ||
|
Когда речь идёт о кэше, то речь об одних и тех же данных можно вести только тогда, когда они действительно одни и те же с точностью до cache-line байт (величина порядка 64 байт). И только тогда, когда потоки долбятся в один и тот же маленький фрагмент, можно говорить о более эффективном использовании кэша. Как только потоки начали долбиться в соседние фрагменты (пусть и выделенные внутри одного пула памяти), то тут уже два физически разных cache-line'а, а следовательно, уже нет принципиальной разницы между потоками и процессами с точки зрения кэша
0
|
||
| 13.10.2019, 16:08 | |
|
Помогаю со студенческими работами здесь
20
В каких случаях создаётся имя в кодировке utf-16 файла или папки, а в каких нет?
В каких случаях предпочтительней использовать процедуры В каких случаях лучше использовать класс с параметрами? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU
YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей.
Звучит. . .
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|