LINUX.ORG.RU

Откуда идет эта модель вычислений?


0

1

Что то я чувствовал, инстинктивно, порочное в этом вашем программировании, но не понимал что именно. А сегодня (с бодуна) начало доходить. Возврат управления в точку вызова, в самом широком смысле. Есть код

instruction1;
instruction2;
...
пока не исполнится instruction1; instruction2; не начнет выполнятся, обычно так, по-дефолту. А должно быть все асинхронно. Управление никуда не должно возвращатся. Любую хрень можно передать через переменную. Так по-дефолту все должно работать, а если надо обеспечивать порядок выполнения, это реализовывать отдельно.

Сейчас, частично к этому приходят, например в JS, асинхронщина щас рулит, но как-то по уродски это все сделано, через колбеки, а надо чтоб по дефолту это было везде.

Традиционная модель должна быть deprecated и considered harmful. Я вообще не понимаю, откуда это все взялось-повелось, идиоты сидели у истоков CS, очевидно.



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

Ответ на: комментарий от avtoritetniy-expert

А это не важно, они ничем не помогут даже при отсутствии расходов на синхронизацию. man закон Амдала, в общем

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

Садись, два. Это для любого алгоритма с какой-то долей вычислений, которые возможно распараллелить. Если их параллелится 95%, ускорение можно получить всего лишь в 20 раз, а большинство вычислений так хорошо не параллелятся.

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

большинство вычислений так хорошо не параллелятся.

Большинство быдловычислений хорошо не параллелятся, на то они и быдловычисления, мля, последовательные и тупорылые.

Заставь три проца досчитать до ста, а потом сложить результаты и сравни, с последовательным выполнением прокрути в остатках мозга, может перестанешь чушь нести.

anonymous
()

Ты все-таки абсолютно и неизлечимо ебанутый.

anonymous
()

О! Ты почти изобрел эрланг (который скоро отметит тридцатилетие). А еще порядок вычислений приведенный тобой напоминает пролог, которому больше 40 лет и из которого отпочковался эрланг.

А очевидно пожалуй то, что никому не всралось твое многопоточное и асинхронное программирование еще 10 лет назад. Появились задачи полезли и решения.

Сейчас появился еще Go, более низкоуровневый (чем эрланг), но вместе с этим более шустрый за счет статики и возможности компиляции.

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

А ты гордишься, что знаешь эксель? Я думал, его секретарши изучают. Любишь мышью программировать?

anonymous
()
Ответ на: комментарий от avtoritetniy-expert

Блядь, да ты совсем идиот. Выпей в следующий раз метанола, что ли.

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

Сдрисни отсюда, школьник. Excel как раз пример dataflow программирования. Если у тебя анальные страдания от excel, замени на cells или org-mode.

anonymous
()

Интересно, какие кирпичи отложит это тупое ничтожество, когда про ОоО узнает.

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

ОоО

Это ооп по новому так называется? Или общество с ограниченной ответственностью? Ты словечек много заковыристых знаешь, научи народ.

anonymous
()

пока не исполнится instruction1; instruction2; не начнет выполнятся, обычно так, по-дефолту. А должно быть все асинхронно.

Не должно. Проблема номер один: общая переменная (man семафоры, потоки и т.д.). Проблема номер два: instruction2 ожидает получения значения из instruction1, а instruction1 ожидает значения из instruction2. Проблема номер три: непредсказуемое поведение (недетерминированность) всего процесса выполнения -> сложно предсказать точное поведение программы -> сложно отлаживать -> сложно проектировать систему с учетом всех возможных вариаций.

асинхронщина щас рулит

Асинхронщина в нынешнем виде не решает фундаментальных проблем на уровне железа. Все, что делает ПК (x86/x86_64) делается практически последовательно. Проблема не столько в том, что процессор не может выполнять множество инструкций, сколько в том, что работа с памятью накладывает 100500 ограничений. Что можно, то параллелится на уровне ОС/железа.

Вникай в суть и ты узнаешь сколько костылей сделано вокруг асинхронщины.

P.S. Платиновые треды ЛОРа.

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

Тупое, грязное школоло не может распарсить Out-of-Order? Небось и про алгоритм Томасуло не слышало, ничтожество?

anonymous
()

Советую посмотреть на lisp, forth, smalltalk, prolog, erlang, haskell и по желанию на всякие ML, agda, epigram, idris, coq.

Там ты найдешь то что уже придумал, то что придумаешь и то до чего никогда не додумаешься.

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

Я подозреваю, что это опенофис. Ты чо оффисный планктон? Чо ты в девелопменте со своими секретарскими замашками делаешь? То ексель у тебя, то опенофис. Тут люди за прораммирование трут, епт.

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

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

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

На весь лисп смотреть не надо, досаточно посмотреть на Cells.

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

Erlang и Go вполне себе разруливают.

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

у Go горутины потолще(4.6кб против 600 байт эрланга) и управляются больше ручками, но за то он шустрее и с кучей типов данных для числодробления и возможностями низкоуровневной оптимизации.

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

Тут еще phill есть, явно вместе с этими двумя ширяется.

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

Томасуло наше усе. Его как лучше спереди пользовать, или сзади, нетрадиционным путем?

ЗЫ ты только не уходи быстро, томасульщик, а то скучно было без тебя. Как там твой лисп поживает? Тут поговаривают что ты конкурс на жабакодера не прошел? Как же мы биореактор строить будем, на пожертвования?

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

Erlang и Go вполне себе разруливают.

А я говорил, что что-то где-то не разруливает? Вообще, оба они (на сколько известно) базируется на (lib)pthread. Внутри этой либы столько всего... :)

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

Еще не выпил метанола, школоло? Поспеши! А этот Томасуло в твоем CPU работает, упорыш ты грязный. Инструкции выполняются асинхронно и в произвольном порядке, все как ТС хотел.

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

Pthread? В ебланге? Ну и ебанут же ты!

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

В моем это в каком? IBM 360/91? Как ты угодал то?

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

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

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

Да кому какое дело до их реализации.

Мало ли. Может ТС ищет истинных знаний. А не мифических идей о том, что все это реализовано где-то, ну чуть ли не идеально. И вот никто, кроме них, не додумался до этого! Это же вранье чистой воды.

Что касается ерланга + pthread. Насколько мне известно последние версии (ну лет так 2-3 назад уже) эрланг позволяет использовать все ядра за счет обычных потоков. Внутри каждого потока находятся эрланго-рутины. Т.е. это гибрид. Отсюда и pthread, или они осилили сделать свою независимую реализацию потоков? Может кто адекватно напомнит/расскажет? Или там процессы + shm/sockets?

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

В эрланге процессы, использовать он может хоть 20 ядер и все раскидывается по ним автоматом, с выделением каждому процессу пропорционального времени (а их можно создавать хоть миллионами). Конкретная реализация малоинтересна, но я как то размышлял над этим и в голову пришла такая мысль: можно представить как функцию с состоянием. И эрланг тупо накапливает вызовы функций раскидывая их по ядрам. И все, никакой магии.

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

В эрланге процессы

А синхронизация данных через что? В любом случае, даже если там не phtread проблемы с синхронизации данных между процессами как были, так и остались. И узкое место в том, что чем больше используется межпроцессорной синхронизации, тем более это похоже на потоки (со всеми вытикающими) и преимущества легковесных потоков сходят на нет. Это ботлнек для любого ПО. Хоть на Go, хоть на Erlang, хоть на плюсах.

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

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

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

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

Спасибо за информацию. Я надеялся на чудо, чтобы уползти с перла :) А так, везде все тоже самое и горстка спецов может что-то менять раз в десятилетия... эх.

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

Из википедии

Серверное ПО WhatsApp написано на Erlang; в январе 2012 года серверы WhatsApp использовали ОС FreeBSD, в них было установлено по 96 ГБ оперативной памяти, и каждый мог обрабатывать от 1 до 2,8 млн соединений, что на несколько порядков выше классической проблемы C10k.

Если это не чудо, то я не знаю :)

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

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

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

We used ten servers Dell PowerEdge SC1435 having 16 GB RAM and 2 dual-core AMD Opteron CPU @2.0 GHz to run ten instances of MigratoryData Client Benchmark. Hence, from each client machine we opened 1.2 million sockets.

Так оно даже и не дотягивает.

anonymous
()
Ответ на: комментарий от avtoritetniy-expert

пока instruction1 не завешится, instruction2 не отработает

> head (repeat 1)
1
anonymous
()
Ответ на: комментарий от gh0stwizard

Посмотрел на цены:

MigratoryData Small Instance Maximum Concurrent Connections = 5000 Maximum Concurrent Subjects = 5000 Ежегодная абонентская плата = 2000 Евро

MigratoryData Large Instance Maximum Concurrent Connections = 25000 Maximum Concurrent Subjects = 25000 Ежегодная абонентская плата = 8000 Евро

А теперь давай ты подсчитаешь сколько будет стоить один сервер с 1.2 миллонами коннектов. А после мы сравним больше это или меньше чем бесплатный эрланг.

anonymous
()
Ответ на: комментарий от avtoritetniy-expert

Да не буду я ничо тебе доказывать, кококо

угу. защитан

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

А после мы сравним больше это или меньше чем бесплатный эрланг.

Эээ.. Такой же бесплатный как линукс-сервер. Линукс бесплатен до тех пор, пока за его настройку, поддержку не отстегиваешь денежку сис.админу. Не надо сравнивать готовое решение с инструментом. Тут логично сравнить эрланг с сишарп/го/плюсы.

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

А на том платном написание нужного софта включено в прайс?

О чем спор? О том, что эрланг позволяет бесплатно писать программы туеве туче программеров, которых продали за 17 миллиардов?

Я дал пример, что даже на яве, якобы тормозной и слишком много жрущей памяти, можно делать аналогичные решения. И эрланг это не язык богов :P

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

avtoritetniy-expert ты серьёзно? Не знал, что можно настолько не понимать алгоритмы. Кстати, все нормальные ЯП уже сто лет в обед имеют поддержку многопоточности и можно даже на GPU считать на 100500 ядрах или даже на нескольких компах, объединённых в сеть. Одна проблема - далеко не все задачи можно делать параллельно, соответственно для них нельзя составить распараллеленный алгоритм. Ну и надо помнить, что GPU легко считает простые вещи, где 100500 потоков одновременно, каждый поток при этом медленно выполняется, но их очень много (на моей видяшке их 960), отчего и производительность будет выше (при условии одновременной нагрузки на достаточное количество ядер GPU), чем при решении такой же задачи на CPU. Но в случае тех же 8 потоков их лучше на CPU считать (т.к. они там будут быстро выполняться каждый). Тонкости того, как считать и как синхронизировать потоки оставлю в стороне, не в этом суть.

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

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

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

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

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

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

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

Ты не поверишь, но и в пыщ-пыщ-вебе чаще всего это математика так или иначе. Если конечно это пыщ-пыщ-веб, а не просто пыщ-пыщ.

Suntechnic ★★★★★
()

ну если instruction2 зависит от данных, получаемых при работе instruction1, то никакой «асинхронщины» тут получить не получится, как не крути. Это у вас мозг затуманен, когда отойдете, подышите воздухом, погуляете, пробежку сделаете, тогда вообще не вспомните, что вас так до самого сердца проняло.

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