psilogic: (Default)
[personal profile] psilogic
Наша автопромышленность выпускает говно на колесах, которое даже при диких пошлинах на иномарки покупать не желают.

Мне вот стало интересно, как же так это получается? Самолеты и космические корабли у нас строят не хуже, чем у людей. Со своей спецификой, конечно, но. А тут - сколько ни пытаются реанимировать отечественную автопромышленность, а "она упорно ползет на кладбище." Прямо "секрет фирмы" какой-то. В чем же дело?

P.S. Моя - не автомобилист, так что я могу совсем не понимать чего-то очевидного водителю со стажем. Прошу не стесняться писать прописные истины и подробности :] Также любые холивары и разборки в коментах только приветствуются :]

Date: 2008-12-20 12:18 pm (UTC)
From: [identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com)
>кто-нибудь мерял этот пресловутый оверхед или просто думают, что теоретически
>он должОн быть, исходя из аксиомы "мелкософты — тупые"? :)

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

>тот же вопрос :)
тот же ответ. разница — порядки. fork()/exec*() — практически мгновенны. CreateProcess() — жутчайший тормоз. я тебе даже могу намекнуть, почему, если ты не в курсе: ключевое слово: IPC. полуркай на предмет процесса csrss.exe, например. возьми книжку Небета, почитай — там ооочень красиво показано, какая хуйня творится в винде при запуске процесса (и, кстати, в винде нельзя сделать примитивнейший fork(); просто нельзя, не используя недокументированые точки входа, которые меняются чуть ли не в каждом сервиспаке; и даже с ними форк выходит хуёвый).

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

про мелочи типа «как уронить винду до синего экрана, имея только логин gest и программу, тупо вызывающую ReadConsole()» или «как порубать ntfs на XP, имея только логин guest и право создавать файлы в %tmp%» даже писать как-то несолидно.

зыж а папег в восторге. неделю уже кроет матом дристу, m$, гейца, балмера и всех остальных скопом. просит линукс. %-)

Date: 2008-12-20 12:22 pm (UTC)
From: [identity profile] shmel39.livejournal.com
В падениях? Ох, сколько раз в наших местах вырубают электричество, ФС последний раз у меня падала еще в те времена, когда был FAT32 раздел. NTFS не падала. Что я делаю не так? ;-)

Date: 2008-12-20 12:24 pm (UTC)
From: [identity profile] psilogic.livejournal.com
[ Что я делаю не так? ]

видимо, надо "поотрывать ей кучу ненужного говна" :)))

Date: 2008-12-20 12:32 pm (UTC)
From: [identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com)
не знаю. у меня 2k и xp отлично разваливались. особенно классно они разваливались, когда свет рубали в процессе chkdsk.

Date: 2008-12-20 12:23 pm (UTC)
From: [identity profile] psilogic.livejournal.com
вот никогда не понимал, на кой член нужен fork... :)

Date: 2008-12-20 12:35 pm (UTC)
From: [identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com)
а ты и не поймёшь, потому что у вас его нет. и потому что с вашим диким оверхэдом на создание процесса и IPC делать процессы вместо потоков будет только самоубийца. хотя при быстром IPC и дешёвом порождении процессов в многих случаях потоки хуже, чем набор процессов.

вопрос мышления. в винде в 99% случаев ты даже не задумаешься: «а может, тут лучше вторую копию себя породить?» это в винде кажется (и является) дикостью. а в никсах — нормальной практикой.

Date: 2008-12-20 12:56 pm (UTC)
From: [identity profile] psilogic.livejournal.com
ну и правильно, это и есть дикость. надо сделать какую-то специфическую задачку в рамках программы, а предлагается копировать всю программу. бред :)

Date: 2008-12-20 01:13 pm (UTC)
From: [identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com)
вот и я о том же. любому виндопрограммеру это покажется бредом — потому что у вас нет такой возможности просто.

кстати, никто никого не копирует, натурально. зачем? copy-on-write никто не отменял.

Date: 2008-12-20 05:07 pm (UTC)
From: [identity profile] psilogic.livejournal.com
и эти люди говорят нам об оверхедах...

Date: 2008-12-20 09:20 pm (UTC)
From: [identity profile] os80.livejournal.com
А нам эти люди вообще советуют сменить место жительства, чтобы была возможность подключиться к интернету из линуха...

Date: 2008-12-20 10:10 pm (UTC)
From: [identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com)
угу. а что, по-твоему, тритыщипиццот вызовов IPC — это получается шустрее, чем на уровне ядра скопировать несколько структур? бугога. у вас CreateThread() работает в идеальных условиях примерно так же, как у нас fork(). только если ваш поток насрёт в память — вся программа наебнётся. а если у нас процесс заглючит — остальные спокойно продолжат работать, а главный родитель, увидев, что дитё подохло, форканёт новое. как думаешь, что надёжней и лучше — когда завалился весь сервер, или когда на долю секунды пропало соединение и всё вернулось на место?

Date: 2008-12-20 10:20 pm (UTC)
From: [identity profile] psilogic.livejournal.com
на уровне ядра скопировать нескоьлко структур? мы говорим о fork или о чем? :)

Date: 2008-12-20 10:33 pm (UTC)
From: [identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com)
именно о fork(). и именно так оно и сделано. и именно потому оно lightning fast.

Date: 2008-12-20 04:34 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, для винды сервера в стиле "один клиент-один процесс-сервер" бывают, но не так часто, как на линуксах. А вообще это вопрос вкуса, по моему - потоки использовать или процессы, при аккуратном раскладывании оных на разные процессоры.

Date: 2008-12-20 05:08 pm (UTC)
From: [identity profile] psilogic.livejournal.com
между процессами труднее передавать данные и выполнять синхренизацию

Date: 2008-12-20 05:32 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Таки потому что IPC в виндах сложнее выглядит, чем в линуксах.

Но вообще это чисто разница в стилях мышления - спорили как-то про GUI для линукса, так народ из линуксового мира не понимает, чем плохо иметь софт в виде тысяч мелких файлов, раскиданных по десятку папок, вместо одного исполняемого файла и пары файлов данных рядом с ним.
Из софта, который использует аналог fork под винду, помню только СУБД Firebird, в режиме классик-сервера(classic как раз и означает, что многопроцессный, и пришло это из юниксов изначально)

Date: 2008-12-20 05:37 pm (UTC)
From: [identity profile] psilogic.livejournal.com
как насчет просто общих данных в памяти, доступных для двух процессов, под чем угодно?

Date: 2008-12-20 05:51 pm (UTC)
From: [identity profile] metaclass.livejournal.com
мемори-маппед файлы, вроде есть и в винде и в линуксах.
если потоковая передача данных - то named pipes в винде и сокеты в линуксах.
Проблемы в общем-то никакой нет IPC устроить, но адекватный враппер для этого дела для виндов появился только в .NET(т.к. там метаданные и сериализация объектов встроенные), а до того - только руками WinAPI вызывать и ручную сериализацию-десериализацию делать.

Date: 2008-12-20 06:26 pm (UTC)
From: [identity profile] psilogic.livejournal.com
ну и сравни весь этот гемор с простым обращением к переменной или функции

Date: 2008-12-20 06:39 pm (UTC)
From: [identity profile] metaclass.livejournal.com
В многопоточных прогах для 24/7 работы нету простых обращений. Начиная с обычных блокировок и заканчивая сложными схемами синхронизации для уменьшения затыков на блокировках. А еще очереди, обработка ошибок, итд, итп, в общем, без разницы становится, в одном это процессе или нескольких. Заодно если в нескольких разных процессах - повреждение памяти в одном не влияет на другие.

Date: 2008-12-20 06:58 pm (UTC)
From: [identity profile] psilogic.livejournal.com
есть данные только-для-чтения, однажды загруженные - там никаких блокировок не надо. есть данные, к которым обращение через блокировку до и после. сравни вызов мутекс-лок-мутекс-анлок и создание, открытие, чтение, запись метафайла...

Date: 2008-12-20 07:00 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да это, в общем-то, у всех, кому надо давно под слоем своих врапперов живет, но похоже, достаточно редкая задача, чтобы эти врапперы не были общепринятыми.

У меня реальная потребность в использовании IPC возникла только в этом году (сервисом управлять из приложения GUI-шного), а я уже 10 лет программирую профессионально.

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-12-20 07:06 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2008-12-20 07:42 pm (UTC) - Expand

Date: 2008-12-20 10:19 pm (UTC)
From: [identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com)
а чего тут сравнивать-то? когда ты будешь писать софт, который должен работать годами не падая и не засирая всю память, где дедлоки недопустимы и ты пы — вот тут ты так намудохаешься с потоками, что проклянёшь тот день и час, гда сел за клаву. именно потому писать подобный софт на винде — как минимум показатель проблем с гойловным мозгом.

Date: 2008-12-20 10:40 pm (UTC)
From: [identity profile] psilogic.livejournal.com
все хорошо к месту - тред для одних вещей, процесс - для других. вот только форк нахрен не припекся :) программа A хочет запустить программу B. при этом она зачем-то создает свою копию A', а только потом запускает B. Бредятина, которая самым мерзким виндусоидам, придумавшим COM/CORBA в голову не пришла :)

Date: 2008-12-20 11:04 pm (UTC)
From: [identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com)
нет, программа A хочет запустить программу A. это раз.

два: вот тебе задача: программа A открыла сокетное соединение. дальше она хочет запустить программу B, которая с этим соединением будет работать. вперёд, решай без форка. а я поржу над накромождением костылей, которые еле-еле со скрипом это всё реализуют через жопу. а сценарий из real life, обычный многоклиентский сервер, промеждупрочим.

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

хинт: потому что у винды в природе нет механизма fork(), да, который и обеспечивает скорость в данном случае.

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

(no subject)

From: [identity profile] http://technorati.com/people/technorati/ketmar/ - Date: 2008-12-20 11:07 pm (UTC) - Expand

(no subject)

From: [identity profile] http://technorati.com/people/technorati/ketmar/ - Date: 2008-12-20 11:09 pm (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-12-21 03:18 pm (UTC) - Expand

(no subject)

From: [identity profile] http://technorati.com/people/technorati/ketmar/ - Date: 2008-12-21 03:32 pm (UTC) - Expand

(no subject)

From: [identity profile] psilogic.livejournal.com - Date: 2008-12-21 03:34 pm (UTC) - Expand

(no subject)

From: [identity profile] http://technorati.com/people/technorati/ketmar/ - Date: 2008-12-21 03:43 pm (UTC) - Expand

(no subject)

From: [identity profile] tikser.livejournal.com - Date: 2008-12-22 09:35 am (UTC) - Expand
Page generated Aug. 17th, 2025 02:41 pm
Powered by Dreamwidth Studios