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

если у тебя именно netsvcs.exe внутри System32, и она работает СТРАННО, то с высокой вероятностью это троян, прокачивающий статистику использования компа в интернет. Попробуй установить антивирус кошмарского, он об нём всё знает.

если ты имешь в виду обычный svchost.exe - то это хаб для разных сервисов. На кой в линуксе есть инит? :) Установи Process Explorer (это бесплатная официальная тулза от мелкомягких), он покажет какие процессы по-настоящему запущены под этим хабом - прямо в дереве процессов покажет. И дальше уже ищи виновника. Добро пожаловать на винфак! xD

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

Я имею ввиду «c:\windows\system32\svchost.exe -k netsvcs.exe». Доберусь до того компа - попробую.

На кой в линуксе есть инит?

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

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

А тут, насколько я понял, куча всякой фигни работает внутри одного процесса.

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

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

убей инит (systemd?) и посмотри что будет :) и да, придется потрудиться, современные иниты должны игнорировать sigterm, а в случае смерти должны перезапускаться, надо заюзать что-то хитрое. интересно, как работает halt...

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

убей инит (systemd?) и посмотри что будет :)

Да при чем тут это? Ошибка в каком-нибудь демоне (что по сути является другим процессом) не приведет к падению инита.

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

А ошибка в сервисе svchost'а не приведет к падению smss.exe :) Однако надо отметить, что в винде большая часть системы лежит на сервисах, как у любой микроядерной ОС.

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

ну на винде это нужно, чтобы снизить затраты ресурсов на создание новых процессов и потоков, расшарить их между собой. Там же всё печально, полтора косаря потоков и досвиданья. Вот тут немного о максимуме в шиндовсе: http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

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

btw, вот такая копипаста: https://gist.github.com/olegchir/ee45b5920561be9a2bf2
у меня на Windows 10 x64 смогла создать 1456 процессов, прежде чем подохла с System.OutOfMemoryException

Руссинович: Because each thread consumes part of a process’s address space, processes have a basic limit on the number of threads they can create that’s imposed by the size of their address space divided by the thread stack size.

Т.е. получается, винде нужно постоянно открывать всё новые и новые svchost'ы по мере того, как сервисы выжирают из него треды. Поэтому svchost это не какой-то единый спрятанный от глаз пользователя экзешник, а куча запущенных svchost.exe, заполонивших системный монитор. Правильно?

UPD: нене, стопэ, форсировал сборку в x64, теперь оно могёт в большее количество трэдов... Пока что оно смогло в пять косарей тредов и чиселка продолжает расти.. Что весьма логично... Но когда делали шиндовс, 64-битные процы еще не были популярны, так что аргумент существования svchost'а никуда не девается по историческим причинам...

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

Установи Process Explorer (это бесплатная официальная тулза от мелкомягких), он покажет какие процессы по-настоящему запущены под этим хабом

Установил. http://i.imgur.com/9fYXxkM.png
Как узнать чего у него внутрях? Развернуть не получатся.

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

винде нужно постоянно открывать всё новые и новые svchost'ы по мере того, как сервисы выжирают из него треды

И гугл, и здравый смысл говорят, что svchost это не более, чем костыль-высер для запуска сервисов из dll (которые они сами туда же и положили для «реюза»). Точно так же можно было деплоить svcname.exe+svcname.dll, причем экзешник пользовался бы svchost.dll, у юзера бы не возникало дебильных вопросов, а вкладки «services» не существовало бы. Но похоже этот момент от индусов как-то уплыл. А, да, треды-то при чем?

So What Is It?

According to Microsoft: “svchost.exe is a generic host process name for services that run from dynamic-link libraries”. Could we have that in english please?

Some time ago, Microsoft started moving all of the functionality from internal Windows services into .dll files instead of .exe files. From a programming perspective this makes more sense for reusability… but the problem is that you can’t launch a .dll file directly from Windows, it has to be loaded up from a running executable (.exe). Thus the svchost.exe process was born.

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

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

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

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

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

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

stevejobs ★★★★☆
()
Ответ на: комментарий от 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

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

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

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

Чяднт?

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

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

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

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

Родительский процесс - это даже отдалённо не то же самое, что запустить несколько процессов внутри одного.

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

При чём тут микроядерность? Ядро NT вообще-то монолитное.

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

Unicode4all> WinAPI, которое тянут из-за тонны легаси, которое никому не нужно.

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

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