powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Есть ли смысл в потоках, если есть процессы
67 сообщений из 67, показаны все 3 страниц
Есть ли смысл в потоках, если есть процессы
    #38362089
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я прочитал, что в плюсах нет своего многопоточного программирования и поэтому плюсы это просто враппер над многопоточностью, которую предоставляет ось.

Вопрос: если для решения задачи, такой как распарсивание гигабайтов текста параллельным методом уже написана утилита, которая может быть запущена в количестве процессов равное числу ядер сервера минус один или два (например два проца по 8 ядер, то запускаем 14-15 процессов), то есть ли хоть малейший смысл заморачиваться в этом случае с написанием многопоточного функционального попила внутри каждого процесса или если речь идет об обработке текста, которая тупо жрет проц и из сервисов системы использует только файловый ио, то может быть конкретно в данном случае заморачиваться с мультитредингом это лишнее?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362129
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том что С++ как язык не владеет объектами мультитрединга или
мультипроцессности. Они - это скорее API конкретной ОС или платформы.
Тоесть 90% успеха твоего мероприятия зависит от того под ЧТО ты будешь
кодить распарсивание гигабайтов. Windows или Linux. Там эти вещи
довольно по разному реализованы. Поэтому определяйся сразу.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362134
LumixЯ прочитал, что в плюсах нет своего многопоточного программирования и поэтому плюсы это просто враппер над многопоточностью, которую предоставляет ось.
Нет. В стандарте C++11 уже больше года поддерживаемом всеми компиляторами есть потоки.

Lumix конкретно в данном случае заморачиваться с мультитредингом это лишнее?
Да.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362151
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вау
а сколько памяти жрет?

14-15 процессов в своп не уйдудт?

у меня есть что-то подобное. "утилита" 3Гб запросто отъедает, тогда как исходный текст - полгига

4 штучки запустил и хватит. правда, у меня и ядер больше нет
зы. гипертдейдинг отключи
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362163
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осмелюсь высказать догадку: процесс жрёт больше ресурсов, чем поток?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362181
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЯ прочитал, что в плюсах нет своего многопоточного программирования и поэтому плюсы это просто враппер над многопоточностью, которую предоставляет ось.


Начнем с того, что это уже не так. В последнем стандарте в C++ появилась уже встроенноая поддержка многопоточного программирования.

http://en.wikipedia.org/wiki/C 11#Threading_facilities
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362184
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix
Вопрос: если для решения задачи, такой как распарсивание гигабайтов текста параллельным методом уже написана утилита, которая может быть запущена в количестве процессов равное числу ядер сервера минус один или два (например два проца по 8 ядер, то запускаем 14-15 процессов), то есть ли хоть малейший смысл заморачиваться в этом случае с написанием многопоточного функционального попила внутри каждого процесса или если речь идет об обработке текста, которая тупо жрет проц и из сервисов системы использует только файловый ио, то может быть конкретно в данном случае заморачиваться с мультитредингом это лишнее?

Это тебе никто не скажет, это целиком зависит от конкретики твоей этой задачи парса текста.

В общем случае преимущество потоков передо процессами в том, что потоки могут без усилий использовать общие данные,
в случае процессов на это нужно тратить дополнительные достаточно серьёзные усилия.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362199
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defragmentatorОсмелюсь высказать догадку: процесс жрёт больше ресурсов, чем поток?

Это неправильная догадка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362203
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivLumixЯ прочитал, что в плюсах нет своего многопоточного программирования и поэтому плюсы это просто враппер над многопоточностью, которую предоставляет ось.


Начнем с того, что это уже не так. В последнем стандарте в C++ появилась уже встроенноая поддержка многопоточного программирования.

http://en.wikipedia.org/wiki/C 11#Threading_facilities

Да я в курсе за эту шнягу. Но я нигде не могу найти (в том числе по этой ссылке), информацию, что эта многопоточность не использует нативные потоки операционной системы, то есть не является враппером. Максимум, что я нашел это фразу типа "многопоточность в ++11 встроена в ядро плюсов", но значит ли это что теперь это никак не связано с потоками операционной системы я пока пруф найти не могу.



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

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

PS. Кстати, именно на основе этого критерия я сегодня утром посоветовал чуваку вот тут 14691640 решить его задачу как раз многопоточно, а не многопроцессово. Хотя у него там питон, а я не в курсе как питон работает с многопоточностью...
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362210
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С точки зрения bash(Unix),cmd(Win) на процессах оно поухватистее будет.
Поюзабельнее. Поскольку из таск-менеджера или из top видна статистика
процессов то ими можно манипулирновать, создавать, убивать менять
приоритеты, посылать сигналы, организовывать конвееры и батчи и прочие
админские штуки. Тоесть очень много пространства для манёвра.

С потоками такое сделать будет нетривиально.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362328
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonС точки зрения bash(Unis),cmd(Win) на процессах оно поухватистее будет.
Поюзабельнее. Поскольку из таск-менеджера или из top видна статистика
процессов то ими можно манипулирновать, создавать, убивать менять
приоритеты, посылать сигналы, организовывать конвееры и батчи и прочие
админские штуки. Тоесть очень много пространства для манёвра.

С потоками такое сделать будет нетривиально.

Чего?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362335
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmaytonС точки зрения bash(Unis),cmd(Win) на процессах оно поухватистее будет.
Поюзабельнее. Поскольку из таск-менеджера или из top видна статистика
процессов то ими можно манипулирновать, создавать, убивать менять
приоритеты, посылать сигналы, организовывать конвееры и батчи и прочие
админские штуки. Тоесть очень много пространства для манёвра.

С потоками такое сделать будет нетривиально.

Чего?
maytonС точки зрения bash(Unix),cmd(Win) на процессах оно поухватистее будет.
Поюзабельнее. Поскольку из таск-менеджера или из top видна статистика
процессов то ими можно манипулирновать, создавать, убивать менять
приоритеты, посылать сигналы, организовывать конвееры и батчи и прочие
админские штуки. Тоесть очень много пространства для манёвра.
С потоками такое сделать будет нетривиально.

я подозреваю что у тс 100% утилизация процессора
эти танцы с бубном тут ничем не помогут
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362336
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixДа я в курсе за эту шнягу. Но я нигде не могу найти (в том числе по этой ссылке), информацию, что эта многопоточность не использует нативные потоки операционной системы, то есть не является враппером. Максимум, что я нашел это фразу типа "многопоточность в ++11 встроена в ядро плюсов", но значит ли это что теперь это никак не связано с потоками операционной системы я пока пруф найти не могу.


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

Одно не понятно -- чем тебе так мешает участие операционной системы.
Для справки -- в диспетчеризации процессов ОС участвует ровно так же, как и в диспетчеризации потоков, только стоимость переключения контекста дороже.

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


Что-то мне намекает на то, что именно потоки-то вам и нужны. Но тебе виднее.

Вообще, многозадачность на процессах уже сейчас (я считаю) -- пережиток прошлого.
По одной простой причине -- потоки могут разделять ресурсы, а процессы -- нет.
Процессы обладают только одним достоинством -- они более безопасны, если гикнется, то умрёт только этот процесс, остальные выживут.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362353
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВообще, многозадачность на процессах уже сейчас (я считаю) -- пережиток прошлого.
По одной простой причине -- потоки могут разделять ресурсы, а процессы -- нет.
Процессы обладают только одним достоинством -- они более безопасны, если гикнется, то умрёт только этот процесс, остальные выживут.
примитивная аргументация
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362381
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилпримитивная аргументация

Примитивная аргументация о примитивной аргументции.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362500
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivОдно не понятно -- чем тебе так мешает участие операционной системы.
Для справки -- в диспетчеризации процессов ОС участвует ровно так же, как и в диспетчеризации потоков, только стоимость переключения контекста дороже.

Я мыслю так: если у плюсов под капотом работа оси, то для нашего случая теряется разница между процессами и потоками. Или можно ещё так сказать: если бы у плюсов были бы свои треды, которые работают много быстрее тредов оси, тогда был бы смысл переделывать на мультитреды.


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

Соображения, почему решение на процессах пока ещё живы.

1) младшие кодеры часто совершают ошибки с нарушением атомарности при реализации многотредовых систем, а при организации параллели на процессах эту атомарность обеспечивает ось. мультитредовый код сложнее читать и он более error prone

2) самый вкусный мультитредовый эффект это так называемое функциональное распараллеливание, а не распараллеливание данных, ну например, рендер в одном потоке, логика в другом, ио в третьем. В этом случае если кто-то начинает много что-то обсчитывать, то по крайней мере юзеринтерфейсы не подвисают, а просто показывают статусы

3) параллель во многом это архитектурное решение, там организация получается более слоисто-списковая и в итоге все сводится к менеджеру и воркерам, а их проще понимать как две разные утилитки: распил, обсчет, премерж ака синхрон ака докрутка, мерж

Поскольку в нашем случае никакого функционального разделения нет, а задача 100% на дата-декомпозите, то и построение на процессах канает.

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

LumixПо одной простой причине -- потоки могут разделять ресурсы, а процессы -- нет.

Единственная причина которую я встречал в своей практике, где реально важен меморишаринг, это какая-то супержирная дата, которую дорого капусулить в сервис, ну например, какой-нибудь look-up на 1,5 Гб. Все остальные кейсы которые мне встречались сводились к организации общения через третье лицо, например, через файл, через базу, через сервер.


LumixПроцессы обладают только одним достоинством -- они более безопасны, если гикнется, то умрёт только этот процесс, остальные выживут.

Ещё достоинства есть.
1) исчезает вопрос с контролем атомарности => проще разработка
2) управление нагрузкой может осуществлять сисадмин стандартными средствами оси, нет надобности мутить свои балансеры

- - - - - - - - - - - - - - -

PS. узнал для себя новое слово - гинуться. первый раз встречаю, чтобы гиком называли доходягу)))
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362582
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

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


А я мыслю так, что ты мыслишь неправильно.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362599
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

Вот вроде бы и правильно всё пишешь, а всё получается как-то не так.

С чего ты взял, что существуют какие-то такие волшебные "потоки вне ОС", которые должны быть быстрее потоков обычных?
Что за такие турбореактивные потоки должны быть? С чего им быть быстрее?
Поток -- это набор комманд, который исполняется. Он исполняется одинаково быстро как под управлением ОС, так и без неё.
Выполняет её процессор, там всё равно, ОС участвует или нет. Когда ОС участвует, это прерывание, по истечении кванта времени, выделенного на данный поток или процесс, потоки и процессы в этом плане равнозначны, что поток прерывается, что процесс. Что отличается, так если ранее процессор занимал другой процесс, нежели тот, который приходит в процессор, то будет переключение контекста на другой процесс. Если нет, а это был другой поток этого же процесса -- не будет переключения. Правда, в процессоре был тред другого процесса, тоже будет переключение.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362762
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivС чего ты взял, что существуют какие-то такие волшебные "потоки вне ОС", которые должны быть быстрее потоков обычных?

Ну вот так подумал, а вдруг такое есть. Создал тему. Оказалось, что этого нет. Вопрос закрыт.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38362966
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПроцессы обладают только одним достоинством -- они более безопасны, если гикнется, то умрёт только этот процесс, остальные выживут.
Я это и имел в виду когда писал про юзабельность процессов. А ты что спросил?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363005
LumixСоздавая тему, я пытался проверить, а можно ли на тредах выжать ещё больше производительность, но если треды и процы различаются только меморишарингом, то решение на процах пусть и остается. В итоге зачем я открывал тему, я все ответы получил.
Кстати, а кто в курсе, если одна и та же функция используется в разных процессах, то код этой функции копируется или размещается в разделяемой памяти и используется оттуда?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363041
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если утилита есть и задачу выполняет, то заморачиваться нет смысла.

если задачу не выполняет - на вещи надо смотреть ширше. Допустим, есть у вас этиваши 15 потоков. А диск вообще справится с одновременным чтением в такое кол-во потоков? Конечно в общем случае это зависит от задачи, но если полагать что каждый из 15 потоков делает последовательное чтение, мне кажется hdd перосто уйдет в сплошной seek, а ssd довольно сильно поплохеет.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363158
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokа ssd довольно сильно поплохеет.

Прошу уточнить термин поплохеет для ssd, потому что у нас серваки как раз на ssd. У них реально резко сильно вырастает физический износ??? или под поплохеет имеется ввиду 100% нагрузка в течение очень долгого времени?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363161
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
та же функция в разных процессахКстати, а кто в курсе, если одна и та же функция используется в разных процессах, то код этой функции копируется или размещается в разделяемой памяти и используется оттуда?
Разделяемый, при условии, что EXE/DLL, в которой находится этот код была загружена по одинаковому адресу (в виртуальном адресном пространстве процесса).
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363180
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalта же функция в разных процессахКстати, а кто в курсе, если одна и та же функция используется в разных процессах, то код этой функции копируется или размещается в разделяемой памяти и используется оттуда?
Разделяемый, при условии, что EXE/DLL, в которой находится этот код была загружена по одинаковому адресу (в виртуальном адресном пространстве процесса).

То есть вы получается утверждаете две интересные вещи

1) не всегда DLL означает загрузку функции один раз и если DLL загружается не операционной системой, а из кода вручную (аналог создания на куче), то такое "ручное" подсоединение DLL создаст столько же копий, сколько и процессов

2) что ось не оптимизирует память даже если чексум вновь исполняемого файла равняется чексуму уже находящихся в исполнении файлов

так-то странно...
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363195
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixтак-то странно...
да
на дворе уже не 1990-й год
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363464
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixchabapokа ssd довольно сильно поплохеет.

Прошу уточнить термин поплохеет для ssd, потому что у нас серваки как раз на ssd. У них реально резко сильно вырастает физический износ??? или под поплохеет имеется ввиду 100% нагрузка в течение очень долгого времени?

Сами-то как думаете?
Второе, ясно дело.

Физический износ ssd происходит при записи. Насколько понимаю, вы в данной задаче - читаете. А под термином поплохеет подразумевалось что изза seek-ов у вас производительность чтения просядет и это может нивелировать эффект от 15 параллельных потоков, может даже сделать гораздо хуже.
Все зависит от специфики задачи - там уже надо конкретно смотреть что как делается.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363509
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokА под термином поплохеет подразумевалось что изза seek-ов у вас производительность чтения просядет и это может нивелировать эффект от 15 параллельных потоков, может даже сделать гораздо хуже.

Хорошо намек понял. Попробуем поставить 8 дополнительных ssd дисков, на которых будут созданы точные копии сырой даты для чтения и тогда на один диск будет приходится всего 2 ядра / процесса.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363527
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalта же функция в разных процессахКстати, а кто в курсе, если одна и та же функция используется в разных процессах, то код этой функции копируется или размещается в разделяемой памяти и используется оттуда?
Разделяемый, при условии, что EXE/DLL, в которой находится этот код была загружена по одинаковому адресу (в виртуальном адресном пространстве процесса).
Под 64-битным линуксом, данное ограничение отсутствует - любая либа может быть загружена в разных процессах по разным адресам и при этом без дубликатов.

Под Виндой - не знаю как. Но думаю что как минимум начиная с Vista (где появился ASLR ) - вполне возможно тоже.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363557
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonMasterZivПроцессы обладают только одним достоинством -- они более безопасны, если гикнется, то умрёт только этот процесс, остальные выживут.
Я это и имел в виду когда писал про юзабельность процессов. А ты что спросил?

Я спросил вообще, каким боком наблюдение процессов в таск манагере относится к данному вопросу и помогает программисту писать или отлаживать этот код?

Кстати, могу напомнить, что в некоторых ОС аналоги таск манагера могут показывать и потоки тоже.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363560
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
та же функция в разных процессахLumixСоздавая тему, я пытался проверить, а можно ли на тредах выжать ещё больше производительность, но если треды и процы различаются только меморишарингом, то решение на процах пусть и остается. В итоге зачем я открывал тему, я все ответы получил.
Кстати, а кто в курсе, если одна и та же функция используется в разных процессах, то код этой функции копируется или размещается в разделяемой памяти и используется оттуда?

Это зависит от операционой системы, но потенциально возможно разместить такой код в разделяемой памяти только для чтения и использовать только одну копию такого сегмента.
Т.е. по факту многие (все распространённые системы) именно так и делают.
Но для этого нужны естественно защищённая память, виртуальная переадресация и read-only сегменты для кода.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363564
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixchabapokа ssd довольно сильно поплохеет.

Прошу уточнить термин поплохеет для ssd, потому что у нас серваки как раз на ssd. У них реально резко сильно вырастает физический износ??? или под поплохеет имеется ввиду 100% нагрузка в течение очень долгого времени?

SSD изнашиваются при записи, на сколько я знаю. Если ваши процессы только читают, ничего не будет.
А если даже и изнашивается -- что ж делать-то?

В любом случае это уже совсем далеко от темы.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363566
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalта же функция в разных процессахКстати, а кто в курсе, если одна и та же функция используется в разных процессах, то код этой функции копируется или размещается в разделяемой памяти и используется оттуда?
Разделяемый, при условии, что EXE/DLL, в которой находится этот код была загружена по одинаковому адресу (в виртуальном адресном пространстве процесса).

В виртуальном пространстве разных процессов этот сегмент кода может быть по разным адресам, и тем не менее физически это будет один блок и он будет разделяться.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363569
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix2) что ось не оптимизирует память даже если чексум вновь исполняемого файла равняется чексуму уже находящихся в исполнении файлов


Никакие чексуммы там не нужны, у них есть путь к исполняемому модулю и имя/номер сегмента.
Это уже однозначно идентифицирует сегмент во всех процессах.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363774
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyПод 64-битным линуксом, данное ограничение отсутствует - любая
либа может быть загружена в разных процессах по разным адресам и при этом без дубликатов.

ЕМНИП, исходники для разделяемых библиотек всегда требовалось компилировать с ключом
-fPIC, что как раз означает генерацию позиционно-независимого кода. Так почему только "под
64-битным линуксом"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363812
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixchabapokА под термином поплохеет подразумевалось что изза seek-ов у вас производительность чтения просядет и это может нивелировать эффект от 15 параллельных потоков, может даже сделать гораздо хуже.

Хорошо намек понял. Попробуем поставить 8 дополнительных ssd дисков, на которых будут созданы точные копии сырой даты для чтения и тогда на один диск будет приходится всего 2 ядра / процесса.

Подумайте на досуге ,
склько у вас памяти , сколько нужно для 8 нитей
и сколько нужно кеша файловой системы.
Что будет, когда активный ввод вывод в кеш ФС будет заганять ваши процессы в своп
и что можно-нужно сделать, что бы этого не происходило.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363861
Anatoly Moskovskyjmp_originalпропущено...

Разделяемый, при условии, что EXE/DLL, в которой находится этот код была загружена по одинаковому адресу (в виртуальном адресном пространстве процесса).
Под 64-битным линуксом, данное ограничение отсутствует - любая либа может быть загружена в разных процессах по разным адресам и при этом без дубликатов.

Под Виндой - не знаю как. Но думаю что как минимум начиная с Vista (где появился ASLR ) - вполне возможно тоже.
А как это вообще реализуется, в разных процессах разные виртуальные адреса ссылаются на одно и то же физическое адресное пространство в котором расположен общий код? И это физическое пространство чем-то отличается от разделяемой памяти или это оно и есть?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363918
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отличается от разделяемой памятиА как это вообще реализуется, в разных процессах разные виртуальные адреса ссылаются на одно и то же физическое адресное пространство в котором расположен общий код? И это физическое пространство чем-то отличается от разделяемой памяти или это оно и есть?
Реализуется через memory-mapped files с отображением в нужный адрес.
Dimitry SibiryakovЕМНИП, исходники для разделяемых библиотек всегда требовалось компилировать с ключом
-fPIC, что как раз означает генерацию позиционно-независимого кода. Так почему только "под
64-битным линуксом"?
А, это у меня видимо ложная память про 32 бита :)
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38363952
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmaytonпропущено...

Я это и имел в виду когда писал про юзабельность процессов. А ты что спросил?

Я спросил вообще, каким боком наблюдение процессов в таск манагере относится к данному вопросу и помогает программисту писать или отлаживать этот код?

Кстати, могу напомнить, что в некоторых ОС аналоги таск манагера могут показывать и потоки тоже.
Ну про мегафлопы автору уже рассказали. Разницы нет. Про плюсы потоков ему рассказали. Есть когда есть
shared данные. Что у него там является shared - ХЗ. Автор
не колется. Может и ничего. Может он просто количество слов решил посчитать и подытожить.
Тогда ему что процесс что поток - всё едино. Посчитал - слил результат. Если выбирать
удобство - использования то процессы лучше. По поводу диска - пускай смотрит сам.
Здесь сам себе злобный буратино.

По поводу каким боком относится - ну и никаким. Он же не спрашивает как ему писать или отлаживать код.
Вот я и не отвечаю. Даю пространные советы как бы Я эту задачу реализовывал исходя из данных СКУДНЫХ
знаний о самой задаче и о конфигурации.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38364574
Anatoly Moskovskyjmp_originalпропущено...

Разделяемый, при условии, что EXE/DLL, в которой находится этот код была загружена по одинаковому адресу (в виртуальном адресном пространстве процесса).
Под 64-битным линуксом, данное ограничение отсутствует...
Под Виндой - не знаю как. Но думаю что как минимум начиная с Vista (где появился ASLR ) - вполне возможно тоже.
А если речь идет о POSIX-fork и WinAPI-CreateProcess, то там вообще такого ограничения никогда не было и никогда не было дубликатов кода?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38364676
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

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

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

Если вам сейчас еще 10 вариантов "катастрофы" придумают - вы будете от всего защищаться? все не предугадаешь, чтобы правильно оптимизировать, надо знать что за задача и где она создает нагрузку, а где нет. Еще вчера вы ничего не подозревали, а сегодня хотите бежать покупать 8 ssd. Мне кажется, это свидетельсвует о том, что вы плохо представляете что у вас там происходит. Вам надо сначала понять это, численно оценить что есть и чего вы хотите, и только потом делать.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38364791
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
POSIX-fork и WinAPI-CreateProcesА если речь идет о POSIX-fork и WinAPI-CreateProcess, то там вообще такого ограничения никогда не было и никогда не было дубликатов кода?
fork точно не создает дубликатов, т.к. это COW, а CreateProcess - создает процесс заново, поэтому зависит от того как винда вообще работает с дубликатами кода - я не в курсе.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38364921
Anatoly MoskovskyPOSIX-fork и WinAPI-CreateProcesА если речь идет о POSIX-fork и WinAPI-CreateProcess, то там вообще такого ограничения никогда не было и никогда не было дубликатов кода?
fork точно не создает дубликатов, т.к. это COW, а CreateProcess - создает процесс заново, поэтому зависит от того как винда вообще работает с дубликатами кода - я не в курсе.
fork - это COW как для дескрипторов, так и для исполняемого кода?
А аналога fork-a в винде нету, или наоборот аналога CreateProcess в POSIX нету?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38364975
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyPOSIX-fork и WinAPI-CreateProcesА если речь идет о POSIX-fork и WinAPI-CreateProcess, то там вообще такого ограничения никогда не было и никогда не было дубликатов кода?
fork точно не создает дубликатов, т.к. это COW, а CreateProcess - создает процесс заново, поэтому зависит от того как винда вообще работает с дубликатами кода - я не в курсе.
Интересно-бы было померять как Windows-создаёт процессы.

Я нашёл лишь сравнительные тесты где сравниваются скорости создания процессов,
открытия сокетов и работы memory-mapped files для *bsd, и linux.

http://bulk.fefe.de/scalability/
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365096
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
POSIX-fork и WinAPI-CreateProcesAnatoly Moskovskyпропущено...

Под 64-битным линуксом, данное ограничение отсутствует...
Под Виндой - не знаю как. Но думаю что как минимум начиная с Vista (где появился ASLR ) - вполне возможно тоже.
А если речь идет о POSIX-fork и WinAPI-CreateProcess, то там вообще такого ограничения никогда не было и никогда не было дубликатов кода?

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

Как правильно разделить слои для вынесения в разделяемые библиотеки
и как правильно эти библиотеки загрузить.

А то не дай Бог ( для тех кто схавал вброс ) в общей памяти окажется неPOD обьект и некоторые бинарники могут не пердсказуемо сигфолтиться.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365106
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИнтересно-бы было померять как Windows-создаёт процессы.

Я нашёл лишь сравнительные тесты где сравниваются скорости создания процессов,
открытия сокетов и работы memory-mapped files для *bsd, и linux.

http://bulk.fefe.de/scalability/

Насколько я помню ИМХО , возможно заблуждаюсь
Windoze без окон жить не умеют
Даже если окон не видно ноги евентов от ОС для процессов ростут из окон .
Поэтому ИМХО будет как минимум не быстрее чем в други ОС ,
где не нужно постоянно за собой тягать осколки окон.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365119
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРmaytonИнтересно-бы было померять как Windows-создаёт процессы.

Я нашёл лишь сравнительные тесты где сравниваются скорости создания процессов,
открытия сокетов и работы memory-mapped files для *bsd, и linux.

http://bulk.fefe.de/scalability/

Насколько я помню ИМХО , возможно заблуждаюсь
Windoze без окон жить не умеют
Даже если окон не видно ноги евентов от ОС для процессов ростут из окон .
Поэтому ИМХО будет как минимум не быстрее чем в други ОС ,
где не нужно постоянно за собой тягать осколки окон.
А консольные windows-applications? Разве они создают эти осколки?
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365182
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДохтаРпропущено...


Насколько я помню ИМХО , возможно заблуждаюсь
Windoze без окон жить не умеют
Даже если окон не видно ноги евентов от ОС для процессов ростут из окон .
Поэтому ИМХО будет как минимум не быстрее чем в други ОС ,
где не нужно постоянно за собой тягать осколки окон.
А консольные windows-applications? Разве они создают эти осколки?

Даже если консольное но с сокетами , то
труЪ Windoze сокет кодингThe third parameter is the Windows message that will be sent when a socket event occurs. In our case the message will be WM_SOCKET (remember we defined this as 104 earlier). The last parameter is a mask. We can set what socket events we want to listen for.


Я другого способа труЪ кодинга не знаю :)
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365262
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аналога fork-a в виндеfork - это COW как для дескрипторов, так и для исполняемого кода?
Для всего адресного пространства процесса, куда входит код программы, код либ, данные, стеки и прочее.
Про дескрипторы и прочие объекты ядра, привязанные к процессу, не в курсе.
аналога fork-a в виндеА аналога fork-a в винде нету, или наоборот аналога CreateProcess в POSIX нету?
Первое. По крайней мере в официальном АПИ.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365313
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аналога fork-a в виндеА аналога fork-a в винде нету, или наоборот аналога CreateProcess в POSIX нету?

В Винде fork нет.
Но есть в CygWin самопальная реализация аналога (а то как же в POSIX да без FORK-а). Но она такая медленная...
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365314
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР
Насколько я помню ИМХО , возможно заблуждаюсь
Windoze без окон жить не умеют
Даже если окон не видно ноги евентов от ОС для процессов ростут из окон .


Заблуждаешься, конечно же. Могут винды жить без окон. НО не любят.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365320
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyПод 64-битным линуксом, данное ограничение отсутствует - любая либа может быть загружена в разных процессах по разным адресам и при этом без дубликатов.

Под Виндой - не знаю как. Но думаю что как минимум начиная с Vista (где появился ASLR ) - вполне возможно тоже.
MasterZivВ виртуальном пространстве разных процессов этот сегмент кода может быть по разным адресам, и тем не менее физически это будет один блок и он будет разделяться.
Возможно, я отстал от жизни, но есть один момент, который таки надо прояснить.

Что делать с таблицей перемещения? Конечно, абсолютных адресов в скомпилированном коде очень мало. Но они есть. Если загрузка произошла по одним адресам - все окей, т.к. коррекция одинаковая. А если нет?

...
PS
Хотя... можно разделять только страницы, где есть коррекция, да.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365326
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalЧто делать с таблицей перемещения? Конечно, абсолютных адресов в скомпилированном коде очень мало. Но они есть. Если загрузка произошла по одним адресам - все окей, т.к. коррекция одинаковая. А если нет?


Хотя этот вопрос и не следует обсуждать в отрыве от конкретной архитектуры, OS и компилятора, но всё же...

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

Это так было типа в DOS/Win16. В Win32/64 вообще адреса все виртуальные, но и тут можно такое проделать.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365332
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalХотя... можно разделять только страницы, где есть коррекция, да.
Так оно именно постранично и происходит в любом случае.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365334
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivjmp_originalЧто делать с таблицей перемещения? Конечно, абсолютных адресов в скомпилированном коде очень мало. Но они есть. Если загрузка произошла по одним адресам - все окей, т.к. коррекция одинаковая. А если нет?


Хотя этот вопрос и не следует обсуждать в отрыве от конкретной архитектуры, OS и компилятора, но всё же...

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

Это так было типа в DOS/Win16. В Win32/64 вообще адреса все виртуальные, но и тут можно такое проделать.
Хех. Как не повезло приложениям на Delphi (по крайней мере на 7).

Я имею в виду строковые константы прямо в тексте программы. Которые, емнип, попадают в исполняемый сегмент напрямую.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365340
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jmp_original

Я согласен, что это малость оффтоп в C++, но просто как пример.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365475
Фотография vromanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВообще, многозадачность на процессах уже сейчас (я считаю) -- пережиток прошлого.
По одной простой причине -- потоки могут разделять ресурсы, а процессы -- нет.
Процессы обладают только одним достоинством -- они более безопасны, если гикнется, то умрёт только этот процесс, остальные выживут.
Также будет верными и обратные утверждения
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38365945
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalХех. Как не повезло приложениям на Delphi (по крайней мере на 7).

Я имею в виду строковые константы прямо в тексте программы. Которые, емнип, попадают в исполняемый сегмент напрямую.

Это не только в дельфе. И не понятно, почему не повезло.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38366208
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivjmp_originalХех. Как не повезло приложениям на Delphi (по крайней мере на 7).

Я имею в виду строковые константы прямо в тексте программы. Которые, емнип, попадают в исполняемый сегмент напрямую.

Это не только в дельфе. И не понятно, почему не повезло.
Каждое место, обращающееся к таким строкам, имеет запись в таблице перемещений. И корректируется при загрузке.
Ибо фиксированный адрес в сегменте кода.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38366218
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalКаждое место, обращающееся к таким строкам, имеет запись в таблице перемещений. И корректируется при загрузке.
Ибо фиксированный адрес в сегменте кода.
Не понял, почему требуется релокация именно при загрузке, когда для исполняемого модуля (программа или библиотека) в момент сборки известно относительное смещение его сегмента данных .
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38366448
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понимаю, почему это вообще вас интересует и как это всё связано с С++ и с этим топиком в частности.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38366461
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНе понял, почему требуется релокация именно при загрузке, когда для исполняемого модуля (программа или библиотека) в момент сборки известно относительное смещение его сегмента данных .Только в tiny-модели.
Во flat - уже нет, т.к. адресное пространство одно, часть его занята, а сколько именно будет занято при конкретном запуске - при сборке ещё неизвестно.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38366541
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, я в последний раз.

Anatoly MoskovskyНе понял, почему требуется релокация именно при загрузке, когда для исполняемого модуля (программа или библиотека) в момент сборки известно относительное смещение его сегмента данных .
Только вот этот самый сегмент данных может быть расположен по разным адресам при загрузке. Как следствие, в команде MOV EAX,_адрес_строки_ необходимо корректировать операнд.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38366772
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovAnatoly MoskovskyНе понял, почему требуется релокация именно при загрузке, когда для исполняемого модуля (программа или библиотека) в момент сборки известно относительное смещение его сегмента данных .Только в tiny-модели.
Во flat - уже нет, т.к. адресное пространство одно, часть его занята, а сколько именно будет занято при конкретном запуске - при сборке ещё неизвестно.
Да все там известно.
При загрузке исполняемого модуля через отображение файла в память (а так оно и происходит) все сегменты модуля сохраняют фиксированное смещение относительно друг друга и поэтому достаточно использовать генерацию PIC чтобы в рантайме не было необходимости в релокации.

MasterZivЯ не понимаю, почему это вообще вас интересует и как это всё связано с С++ и с этим топиком в частности.
Ну мало ли топиков было, где обсуждались детали реализации ОС - напрямую это не противоречит форуму, т.к. не запрещено, а всего лишь не рекомендуется :).
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38368025
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyПри загрузке исполняемого модуля через отображение файла в память (а так оно и происходит) все сегменты модуля сохраняют фиксированное смещение относительно друг другаОтносительно друг друга - да, а вот относительно базы (нуля) единственного "плоского" сегмента - уже негарантированно.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38368038
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Так я и говорю - в линуксе все либы компилируются с PIC. Поэтому какая там база не имеет значения, код обращается ко всем функциям и данным по относительным адресам.
...
Рейтинг: 0 / 0
Есть ли смысл в потоках, если есть процессы
    #38370153
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, если пропустил, но если вопрос производительности стоит ребром, м б кластеризация??

Процессы, потоки.. всё равно упираются в железо. Или там камни на видео карте задействовать.
Имеются вариантики)
...
Рейтинг: 0 / 0
67 сообщений из 67, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Есть ли смысл в потоках, если есть процессы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]