LINUX.ORG.RU

Вытесняющая vs кооперативная многозадачность

 


0

1

Как Вы думаете, что было бы если бы развитие пошло по пути кооперативной многозадачности? Было бы лучше или хуже? Почему пошли по пути вытесняющей? Замешана ли тут политика, идеология?

Я помню, модель Карла Хьюитта предусматривала конкурентную модель параллелизма, и он считал ее оптимальной,так?

На фоне 10-летнего кризиса IT эти вопросы снова стали актуальными

Это в частности касается конкуреyции между линейками windows 9x и NT. 9x использовали частично кооперативную многозадачность



Последнее исправление: no2700 (всего исправлений: 3)

если бы развитие пошло по пути кооперативной многозадачности?

в общем случае точно не пошло бы

Было бы лучше или хуже? Почему пошли по пути вытесняющей? Замешана ли тут политика, идеология?

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

На фоне 10-летнего кризиса IT

какого кризиса?

Это в частности касается конкуреyции между линейками windows 9x и NT. 9x использовали кооперативную многозадачность

мда, молодежь даже про Windows 9х не знает… Windows 9x использовали кооперативную многозадачность только для 16-битных приложений. 32-битные выполнялись в вытесняющем режиме.

seiken ★★★★★
()

9x использовали частично кооперативную

ха! исправил таки :)

seiken ★★★★★
()

На фоне 10-летнего кризиса IT эти вопросы снова стали актуальными

windows 9x и NT

Где ты такую тухлую методичку откопал?

no-such-file ★★★★★
()
Ответ на: комментарий от seiken

какого кризиса?

Ну все ж знают что IT не просто стоит а деградирует на глазах.

У меня на ноуте в 00-х стоял автокад, полная линейка Adobe и все летало на 2-х гигах памяти. Опера была настолько быстрой, что ты не замечал переход по сайтам, как будто это были текстовые файлы на компе. Офис в 90-х специально замедляли для солидности. В мш ты не смог бы заметить отрисовки текста при любой скорости печати, он был как молния. Это все на допотопном железе с минимумом памяти.

no2700
() автор топика
Ответ на: комментарий от no2700

мш=vi имелось в виду. А был еще TECO И вообще был настоящий UNIX от Bell Labs, который не какой то там гну

no2700
() автор топика

async в большинстве языков является реализацией кооперативной многозадачности в одном потоке.

timdorohin ★★★★
()
Ответ на: комментарий от no2700

У меня на ноуте в 00-х стоял автокад, полная линейка Adobe и все летало на 2-х гигах памяти

Это все на допотопном железе с минимумом памяти.

Автокад это что-то такое супер ресурсоемкое? В 2000х 3D Max Studio как рендерил сложные сцены долго, так и сейчас рендеринг по-современному сложных сцен очень ресурсозатратен, и никаких «с минимумом памяти» тут не может быть. Включи мозг.

seiken ★★★★★
()
Ответ на: комментарий от seiken

Да, там написано «поскольку она[кооперативная] использует более передовые методы, чем простое переключение задач»

no2700
() автор топика
Ответ на: комментарий от no2700

Да, там написано «поскольку она[кооперативная] использует более передовые методы, чем простое переключение задач»

ссылку можно? Может я что-то не то читаю.

seiken ★★★★★
()
Ответ на: комментарий от seiken

Я предпочитаю верить своим глазам. Сейчас гребаный хром стал «более ресурсоемким» чем те видеоредакоры

no2700
() автор топика
Ответ на: комментарий от seiken
Ответ на: комментарий от no2700

Там через один абзац про недостатки написано. Это ответ на твой вопрос, почему в общем случае это плохое решение.

seiken ★★★★★
()
Ответ на: комментарий от seiken

там далеко смотреть не надо. Даже «продвинутая» XP была 1 гиг.Монстры пошли как раз с Висты. Виста была в несколько раз больше и в несколько раз хуже.

no2700
() автор топика
Ответ на: комментарий от no2700

В мш ты не смог бы заметить отрисовки текста при любой скорости печати, он был как молния.

я и на новых системах не замечаю

seiken ★★★★★
()

развитие пошло по пути кооперативной многозадачности? Было бы лучше или хуже?

Кооперативная на уровне ОС невозможна. Она просто не потянет все юзкейсы.

ox55ff ★★★★★
()
Ответ на: комментарий от seiken

Ну давай разберем по пунктам.

«неспособность всех приложений работать в случае ошибки в одном из них»

Это откуда ванек взял?

no2700
() автор топика
Ответ на: комментарий от no2700

Они и сейчас есть для каких-нибудь микроконтроллеров. Чтобы мигать лампочкой и считывать показания АЦП этого достаточно. Чтобы поддерживать функциональность современной ОС - нет.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Я думаю что это общие слова без конкретного содержания, типа «у человечества нет иного пути кроме как путь к социализму!» бурные аплодисменты

no2700
() автор топика
Ответ на: комментарий от seiken

объективно это можно так рассудить: поставь современное ПО на то железо на котором работало это ПО в 90-00х и все станет ясно

no2700
() автор топика

Потому что ты не хочешь, чтобы из-за одной багнутой программы у тебя зависала целая ОС. А баги в программах всегда будут, даже ракеты и самолёты иногда (просто очень редко) падают из-за программных ошибок, хотя там достаточно серьёзный контроль качества (ценой удорожания разработки на несколько порядков, что ты опять же вряд ли захочешь для бытового софта).

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

Это примитивные рассуждения. Можно сделать реализацию контроля за зависшитми приложениями не ломая при этом кооперативность.

Кстати по факту это не решается и в вытесняющей. Частенько приходится делать перезагрузку из-за зависшего приложения

no2700
() автор топика
Ответ на: комментарий от no2700

Не шлангуй.

Производительность: в кооперативной многозадачности программист сам определят место в программе где может произойти смена контекста. Если выберет плохое место или редко будет отдавать контекст, то программа и ОС в целом будут плохо отзывчивыми. Если будет отдавать контекст часто, то будет неэффективная работа из-за лишних действий.

Безопасность: вредитель или просто криворукий программист может сделать так, что программа никогда не отдаст контекст. Так можно всю ОС повесить. Это явная уязвимость.

Облако: как предлагаешь запускать несколько виртуалок (vps) на одной железке? А если я куплю vps и сделаю там бесконечный цикл без смены контекста? Моя виртуалка повиснет и повиснет ядро сервера, которое обслуживало виртуалку в данный момент. Чё, двумя строчками кода повесил инфраструктуру облачного провайдера?

Функциональность: сделай мне аналог отладчика gdb в режиме кооперативной многозадачности. Вот я запустил программу под отладчиком и хочу её приостановить в произвольном месте, а не в точке смены контекста. Как мне это сделать? Отладчик будет висеть без процессорного времени пока программа не отдаст контекст. Или в таких случаях ты предлагаешь использовать исключительно многоядерные процессоры, чтобы отладчик и программа работали на разных ядрах?

Тысячи примеров…

ox55ff ★★★★★
()
Ответ на: комментарий от no2700

Можно сделать реализацию контроля за зависшитми приложениями

То есть проблемы кооперативной многозадачности решаются путём добавления механизма… мм… вытеснения задач?

PolarFox ★★★★★
()
Ответ на: комментарий от no2700

Вот одна из причин:

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

То есть это мешает притоку в индустрию малоквалифицированного персонала

no2700
() автор топика
Ответ на: комментарий от no2700

А вот преимущества:

"Однако распределение функций планировщика между системой и приложениями не всегда является недостатком, а при определенных условиях может быть и преимуществом, потому что дает возможность разработчику приложений самому проектировать алгоритм планирования, наиболее подходящий для данного фиксированного набора задач. Так как разработчик сам определяет в программе момент времени отдачи управления, то при этом исключаются нерациональные прерывания программ в «неудобные» для них моменты времени. Кроме того, легко разрешаются проблемы совместного использования данных: задача во время каждой итерации использует их монопольно и уверена, что на протяжении этого периода никто другой не изменит эти данные. Существенным преимуществом non-preemptive систем является более высокая скорость переключения с задачи на задачу. Примером эффективного использования невытесняющей многозадачности является файл-сервер NetWare, в котором, в значительной степени благодаря этому, достигнута высокая скорость выполнения файловых операций. Менее удачным оказалось использование невытесняющей многозадачности в операционной среде Windows 3.х. "

http://ermak.cs.nstu.ru/mos1/chap_3_3.php

no2700
() автор топика
Ответ на: комментарий от no2700

Частенько приходится делать перезагрузку из-за зависшего приложения

Это либо 12309, либо зависание в драйвере (чаще всего видеокарты), а драйвера как раз работают в кооперативной многозадачности.

KivApple ★★★★★
()
Ответ на: комментарий от no2700

Потому что сбой в пространстве ядра в любом случае всё угробит. Плюс ядро разрабатывается одной командой с общими стандартами качества и кодирования (в Linux Линус жёстко фильтрует патчи, в Windows с каких-то пор требуется сертификация от MS с цифровой подписью). При этом драйверам часто нужен риалтайм (так как работа с железом, например, может быть важно после записи в один регистр девайса прямо следующей командой записать в другой, а не уйти внезапно на исполнение другой задачи), в то время как для пространства пользователя лаг в несколько миллисекунд почти всегда некритичен.

KivApple ★★★★★
()

Кооперативная многозадачность может иметь меньше накладных расходов и работать быстрее на embedded устройствах. На сохранение/загрузку регистров при вытесняющей многозадачности тратятся дополнительные ресурсы.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

На сохранение/загрузку регистров при вытесняющей многозадачности тратятся дополнительные ресурсы.

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

при кооперативной регистры тоже спасаются.

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

X512 ★★★★★
()
Ответ на: комментарий от X512

на колбеках - это вообще не многозадачность. там даже стек не надо переключать. на колбеках делать вообще не следует.

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

на колбеках - это вообще не многозадачность.

Почему? Если грамотно вручную разбить задачи на функции с коротким временем исполнения то вполне себе будет многозадачность. Частным случаем такой многозадачности является GUI с главным циклом обработки сообщений и функциями-колбеками обработки сообщений. Ещё многие компьютерные игры основаны на колбеках.

если переключается стек и есть оптимизация все равно спасать надо все регистры

Нет, сохранять надо только preserved регистры. Функция переключения вроде Yield() имеет право портить non-preserved регистры.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 2)
Ответ на: комментарий от X512

…Если грамотно вручную

как много их, упало в эту бездну…

alysnix ★★★
()
Ответ на: комментарий от KivApple

так там заявляется что вытесняющая многозадачность и есть риалтайм. Тут что конкретно имеется в виду?

no2700
() автор топика
Ответ на: комментарий от alysnix

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

Хотя на уровне ОС там видимо все равно этот поток прерывается, но это абстрагированно. Модель выполнения там именно такая.

no2700
() автор топика
Ответ на: комментарий от no2700

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

давайте задачи отдельно, а «асинхронность» - отдельно.

задачи имеют состояние и могут между собой переключаться, состояние задачи - это стек и регистры.

от того как переключается задача - самой задачей или внешней активностью - шедулером и появляются два вида многозадачности - кооперативная и «вытесняющая».

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

не надо ничего отдельно, суть там та же самая. Функция - это по сути программа которая выполняется за один раз(не считая всяких там ручных передач управления типа call/cc и сопрограмм).

no2700
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.