psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2008-12-20 12:11 pm

Секрет фирмы

Наша автопромышленность выпускает говно на колесах, которое даже при диких пошлинах на иномарки покупать не желают.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[identity profile] metaclass.livejournal.com 2008-12-20 07:42 pm (UTC)(link)
fork это какая-то странная вещь, да. Для винды)
а для юниксов вообще стандарт.

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

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

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

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

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

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

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

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

[identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com) 2008-12-20 11:09 pm (UTC)(link)
если интересно, почему именно не переоткрывать файлы — потому что они удалены. и открывать нечего. а хэндл есть и с файлом можно работать, пока последний хэндл на него не закрыли. виндовый DeleteOnClose — не то решение.

[identity profile] psilogic.livejournal.com 2008-12-21 03:18 pm (UTC)(link)
[ нет, программа A хочет запустить программу A. это раз. ]

а ежели надо жопустить B? :) posix-треды вроде не сразу появились, а? ;)

[ вот тебе задача ]

в этой задаче я попользую тред

[identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com) 2008-12-21 03:32 pm (UTC)(link)
>а ежели надо жопустить B? :)
и об этом я написал.

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

[identity profile] psilogic.livejournal.com 2008-12-21 03:34 pm (UTC)(link)
[ уволен без выходного пособия ]

вернулся с ружжом :)

[identity profile] http://technorati.com/people/technorati/ketmar/ (from livejournal.com) 2008-12-21 03:43 pm (UTC)(link)
а поздняк. контора переехала, новый адрес неизвестен. долго за ружжом бегал! %-)

[identity profile] tikser.livejournal.com 2008-12-22 09:35 am (UTC)(link)
Это вы типа автопром обсуждаете? ;))
Вижу проблемы разработки софта, тонкости трудового законодательства и отдельные аспекты правоприменения огнестрельного оружия, а где машина-то? ;)))