LINUX.ORG.RU
ФорумTalks

Интересно, разработчики слышали про многозадачность?

 ,


0

1

Август 2015 года. Ноутбук Lenovo b590 c Pentium Dual-Core, 3 Gb ОЗУ и неродным HDD на 7200 оборотов шпинделя. Установлена:

$ cat /etc/lsb-release
DISTRIB_ID=Xubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.2 LTS"

Totem играет ролик mp4 скачанный с Youtube. Появляется сообщение о поступивших обновлениях - разрешаю. При установке обновления ядра звук ролика трансформируется в азбуку морзе.

Хочется просто взять и плюнуть ди-джею с суп.



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

Ответ на: комментарий от ls-h

Вот так должно быть: http://i.imgur.com/59YnxK9.png
Может ты не с правами администратора запустил?
Или может антивирус как-то блочит, попробуй остановить его на пару минут.
Чем помочь более не знаю :) Возможно это реально svchost без процессов внутри - они из него отвалились, а память свою, буферы всякие - не почистили. И тут уже ничего не сделаешь кроме перезапуска svchost'а. Но это просто предположение, правильного ответа я не знаю

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

Нет. <svcname>.exe работают сами по себе безо всяких svchost'ов. Засовывать сервисы в библиотеки, и загружать их специальной пускалкой придумали, так как вместо множества отдельных процессов-сервисов — один, это позволяет экономить память (библиотека требует меньше памяти), а в те времена ОЗУ экономили как могли. Минус в том, что сбой в любом таком сервисе может уронить весь хост-процесс со всеми сервисами, которые висят на нем. А в винде это критично.

Unicode4all ★★★★★
()
Ответ на: комментарий от ls-h

Ну вот, теперь ты можешь скриншотить использование ресурсов в системном мониторе, убивать их по одной и смотреть какой импакт дал каждый следующий убитый процесс xD

stevejobs ★★★★☆
()

Не замечал такого. Тут или кеш маленький у тотема и IO забит. Или забит проц и процессы апта идут с более высоким приоритетом (а должно быть наоборот).

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

Хочешь сказать, что в один процесс допихивается несколько dll-ок? Во-первых, как это выглядит технически, а во-вторых, почему это до сих пор не выпилят?

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

привел же методику тестирования - код на C#, копипаста на гитхабе. На 32-битном шиндовсе нельзя запустить более ~1400 тредов. Суммарно процессов верхнего уровня можно запустить сильно меньше, чем тредов в одном процессе. Учитывая какое это убогое количество, эти процессы нужно экономить. Если ты будешь запускать svcname.exe на каждый чих, у тебя максимум процессов быстро израсходуется. А если ты все эти процессы оформишь как dll'ки и впихнешь в один процесс в виде раздельных тредов, то это поможет немного сэкономить ресурсы. Тем более, что память у них будет общая, и вместо прокидывания данных по пайпам или еще как-то (что приводит к неизбежному копированию), ты сможешь просто передавать сосденим процессам указатели на куски собственной памяти. Профит, не?

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

Да, спасибо, прочитал, оказывается на википедии есть.

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

Да, точно! Спасибо! Правда жрать пока перестало. Ждем-с...

ls-h ★★★★★
()
Ответ на: комментарий от arturpub

что в один процесс допихивается несколько dll-ок?

Да, и они выполняются в отдельных потоках. А потоки в win не являются процессами, в отличии от unix-систем.

почему это до сих пор не выпилят?

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

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

так винапи ж завернули в .net'овые обёртки, пиши на обёртках? или есть проблемы?

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

Там 100% код заполнен исключительно синхронным I/O который говно. Надо на уровне ОС любой синхронный I/O запретить. Чтобы читать из UI-потока было нельзя вообще, а мерзостные fread/fwrite во всех вариациях просто удалить.

ranka-lee
()
Ответ на: комментарий от ranka-lee

кстати, для нативного кода (для C/C++) есть какие-нибудь green threads, которые реально применяются? Особенно кроссплатформенные

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

Я уже давно убедился, что на винде есть нормальная многозадачность,

Да, а где такую винду можно найти? IO ставит любую виденную мною винду на колени также, как и линукс.

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

как минимум, это копирование будет прерываться рандомными эпизодическими чтениями-записями в других местах, например, обновить метаданные ФС, в своп залезть, да и эти самые большие файлы не факт что непрерывно располагаются в ФС

Это всё мелочи на уровне 1-5%.

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

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

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

На 32-битном шиндовсе нельзя запустить более ~1400 тредов.

Можно. Минимум, на порядок больше можно. Ограничения тут фундаментальные, в Линуксе будет всё тоже самое.

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

Там идёт чтение/запись нередко в десяток-два потоков

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

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

Если у тебя не 32 мегабайта оперативы,

Вообще ничего не значащая величина. Раньше и 1Мб было много.

то пересборка ядра нагружает IO только в самом её начале, далее вся нагрузка только на проц.

В каком начале? При чем тут пересборка ядра, если речь о пересборке мира?

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

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

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

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

на винде когда включается индексация системного жесткого диска - а она включается часто и жрёт не менее 20Мб/с, т.е. ровно макс скорость моего HDD, все программы на винде виснут намертво

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

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

Это всё мелочи на уровне 1-5%.

скорее 10-50%

более того, даже при строго линейном копировании скорость сильно зависит от размера блока

я вот экспериментировал с dd if=/dev/sda of=/dev/sdb и копировал терабайтные харды с одного на другой

постоянная скорость выше 100м держится только при определённом размере блока, не помню точно, 1 мегабайт или 8, во всех остальных случаях оно резво копирует первые несколько десятков гигабайт, а дальше скорость начинает падать, и к концу dd показывает среднюю скорость около 50 мегабайт/c

короче максимальна скорость в реальной десктопной работе практически недостижима

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

даже при строго линейном копировании скорость сильно зависит от размера блока

наверно кривости реализации firmware устройст

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

скорее ограничения движущегося механизма

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

arturpub> Август 2015 года, а линукс не может в приоритеты ui-critical.

Может. Просто планировщик надо подходящий использовать.

Quasar ★★★★★
()
Ответ на: комментарий от ranka-lee

Надо на уровне ОС любой синхронный I/O запретить
а мерзостные fread/fwrite во всех вариациях просто удалить.

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

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

неособо проблема, да линуксом нереально пользоваться на hdd, но это очень просто решается покупкой ssd

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

не факт, на венде бывают драйвера nvidia чудачат. Поищи 'nvidia huge disk usage'

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

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

Ну так и ответь тогда, почему перевод /var/tmp на tmpfs ускоряет процесс сборки многократно :D

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

Ну так и ответь тогда, почему перевод /var/tmp на tmpfs ускоряет процесс сборки многократно

Потому что ты куришь что-то не то. Ядро в распакованном виде - гигабайт, оно засосётся в оперативу на самой убогой машине согласно сегодняшнему времени.

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

Чяднт?

ХЗ., что ты делаешь. У тебя венда грузится 5 или 15 минут, такое только в наркоманских снах бывает. Нет ограничений на количество процессов в венде, кроме фундаментальных.

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

Раньше и 1Мб было много

В те времена, когда 1Мб было много, никакого Линукса не было в помине.

При чем тут пересборка ядра, если речь о пересборке мира?

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

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

Измерял много раз. Если у меня копирование по сетке происходит со скоростью менее 100 мегабайт в секунду, это повод беспокоиться и разбираться.

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

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

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

Да, 100 мегабайт/c, 1000mbit. Прикинь. Техника на гране фантастики, будущее уже здесь. Оно лет 7 назад уже так работало, сейчас это уже маловато.

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

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

нее, как раз задержка помогает по идее

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

Harald ★★★★★
()

С I/O в linux беда, и я об этом всем говорю. Но разрабы упорно отрицают сей факт, ага.

Поставил на копирование с удаленной шары 90гб данных, открыл терминал. Bash (именно bash! окно появилось нормально) загружается 30 секунд. Окей, ЯСНОПОНЯТНО.

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

вот когда задержа между чтением с одного и записью на другой минимальна, могут и простои на ожидание возникать

Кеширование должно работать.

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

Потому что ты куришь что-то не то. Ядро в распакованном виде - гигабайт, оно засосётся в оперативу

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

С записью — эффект от кеша будет приличный. Вот только временные файлы из кеша будут синкаться на диск, чтобы... потом оттуда удалиться. Опять оверхед.

...

И снова ты теоретизируешь там, где у меня была многолетняя практика. Я с Gentoo провёл десятка два-три машинолет в разных конфигурациях. tmpfs скорость компиляции реально ускоряет офигенно. Но не на каждой машине есть возможность выделить 4-6 Гб оперативки под tmpfs для /var/tmp/portage.

И в процессе сборки нагрузка на IO часто лимитирует куда больше нагрузки на CPU.

KRoN73 ★★★★★
()
Последнее исправление: KRoN73 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.