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

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

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

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 лет программирую профессионально.

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

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

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(), да, который и обеспечивает скорость в данном случае.

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

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

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

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

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

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

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

(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 03:38 pm
Powered by Dreamwidth Studios