|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Привет друзья. В настоящее время КМК идет переосмысление технологий разработки мультипоточных приложений. Некоторые поинты: 1) Отказ от программирования потока Thread как от единицы параллелизма в бизнес приложениях. Предполагается что event-driven более эффектичен чем масоовые "сидения" потоков в "мониторах". 2) Использование асинхронного вызова (async-call, callable, future, promise) в тех случаях когда это возможно. 3) Пересмотр архитектуры Thread с использованием Fiber (пример project Loom). Кооперативность снова в деле. Continuations (под другим названием). 4) Использование актора (обычно в совокупности с очередями и легковесными потоками). (Akka). Неблокирующие операции. Дешевизна ресурсов. Один нативный поток ОС обслуживает сотни акторов. 5) Использование корутины (coroutines). Использование уступчивого return (yield) (C#,Python) для организации сложных итераторов и генераторов. 6) Функциональный подход в части декомпозиции циклов (for-while) в рекурсии (Erlang) где это (теоретически) даёт возможность гибкого управления кооперативной мультипоточности. 7) Последние экономические тренды в области строительства ЦОД. Отказ от покупки крупных серверов и предпочтение облаков. Микросервисы. 8) Специальные языки где асинхронный I/O выдвинут как feature (Node.JS). Языки - где корутина - фича. Go(goroutine). 9) Некоторые архитектурные ошибки строителей РСУБД которые привели к утилизации процессорных ресурсов на бесполезной синхронизации там где этого можно было избежать вообще (статья Майкла Стоунбрейкера). Пруфы приводить не буду. Топик - просто является неким облаком тегов или смыслов которые я предлагаю обсудить. Если я где-то ошибся - и классифицировал понятия не так - прошу прощения. Я также мог ошибится в связи ЯП и фич. Sorry. Но надеюсь общий смысл будет ясен. P.S. Убежден что поток как единица разработки совершенно необходим в вычислительных задачах с HighLoad-CPU нагрузкой. Особенно где длительное время нет взаимодействия с внешним миром. Есть только взаимодействие АЛУ и memory канала. Но такие задачи достаточно специфичны и в бизнес-приложениях их не много. Какова будет мультипоточность в будущем? Прошу ваши каменты. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 22:26 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonКакова будет мультипоточность в будущем? ИМХО все зависит от обертки, т.е. от API и синтаксического сахара для использования мультипоточности. Например в виндовсе есть I/O Completion Ports со времен WinXP, но мало кто этим пользуется в чистом виде. Хотя штука более производительная чем классические подходы с пулами потоков. Но стоило MS построить поверх библиотеку .Net классов с .xxxxAsync() методами, добавить async/await в C# и многие стали это использовать. Т.е. стало относительно просто писать многопоточный код. Я думаю главное простота написания кода и максимально возможная защита от "выстрелов в ногу" неопытными разработчиками. В остальном чудес не будет, все остальные проблемы упираются в отсутствие параллельных алгоритмов. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 10:23 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonОтказ от покупки крупных серверов и предпочтение облаков. Микросервисы.это модные тенденции. облака зависят от политики. микросервисы .... мультипоточность нужна там где можно распараллелить работу. и там где есть физические возможности реализовать это. это было и будет определяющим. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 14:50 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Dima TНо стоило MS построить поверх библиотеку .Net классов с .xxxxAsync() методами, добавить async/await в C# и многие стали это использовать +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 15:12 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mayton 2) Использование асинхронного вызова (async-call, callable, future, promise) в тех случаях когда это возможно. Похоже это уже сейчас(а может и вчера) везде и всюду. Мы используем, буквально несколько дней на одном из докладов тоже упоминали вскользь. Мне кажется не будет ни в настоящем ни будущем единого хорошего подхода. Все как и сейчас будет опряделятся квалификацией и личным мнением команды, архитекторов, математиков. А может быть вообще ML будет этими вещами заниматься - не удивлюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 18:57 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
В каждом языке - взят свой подход (ну или несколько, но не все). Осталось найти язык, в котором есть все варианты. Ну или реализованы библиотеками Только надо составить точную классификацию подходов, чтобы удобно было ставить галочки ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 20:15 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 20:25 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mayton7) Последние экономические тренды в области строительства ЦОД. Отказ от покупки крупных серверов и предпочтение облаков. Микросервисы. Микросервисы тут не совсем в тему. Остальное это классический подход владельцев бизнеса к расходу денег: не стоит тратить сразу и много, если можно арендовать, даже если в итоге цена вопроса окажется в 1.5-2 раза выше, то это все-равно выгодно, т.к. проще платить по факту, т.е. операционные расходы, чем сразу потратить кучу денег на неопределенный срок, который может оказаться небольшим и потребуется новая куча. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2018, 20:29 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
1. говоря об асинхронной многопоточности подразумеваем Linux/Unix; 2. C++ boost::asio включает в себя корутины, асинхронность и вообще всё что нужно. Но ещё есть boost::fibers и у неё тоже есть неплохие показатели; 3. корутины берут простоту синхронного подхода и нивелируют сложности асинхронного подхода, в итоге код становится мягким и шелковистым; 4. stackfull корутины без ниток (fibers) дают ~30k rps на поток; 5. локи (sync) не использует никто, годятся только для sync; 6. Go сливает C++; 7. C++ в многопоточности ноздря в ноздрю с Haskell (Haskell это боженька в многопоточности, там вообще 0 сложностей (со слов Ульриха)); 8. есть вариант с подключением FPGA. Есть такая вот табличка: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
(почему эрланг в жопе - непонятно, видимо ему дали что-то считать... как он может сливать Go?! Erlang так то держит десятки и даже сотни лямов) Там есть конфликт: Boost::fiber состоит из: coroutines + scheduler + manager. И этот manager конфликтует с Boost::Asio, т.к. там есть свой м-р. оба эти парня ратуют за фьючи, а это что-то да значит...: ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 02:40 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 03:25 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудух4. stackfull корутины без ниток (fibers) дают ~30k rps на поток; Непонятно. Что за 30k rps? 38 попугаев. 5 мартышек. ? полудух5. локи (sync) не использует никто, годятся только для sync; Непонятно. полудух6. Go сливает C++; Это может говорить от первого лица только разработчик который писал приложение на С++ потом переписал на Go и сделал свои выводы. Поэтому я-бы воздержался от прямых утрверждений что кто-то что-то сливает. полудух7. C++ в многопоточности ноздря в ноздрю с Haskell (Haskell это боженька в многопоточности, там вообще 0 сложностей (со слов Ульриха)); Хотелось-бы посмотреть на пример "0 сложностей". Я давно для себя ищу "легкую" мультипоточность. полудух8. есть вариант с подключением FPGA. Хеш тег FPGA в данном форуме может сократить аудиторию на парочку порядков. Давайте не будем пока педалить эту тему. Слишком specific. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 10:01 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonполудух4. stackfull корутины без ниток (fibers) дают ~30k rps на поток; Непонятно. Что за 30k rps? 38 попугаев. 5 мартышек. ? попугаев. на поток. полудух5. локи (sync) не использует никто, годятся только для sync; Непонятно. В async используют либо fibers + coroutines, либо просто stackfull coroutines (другие варианты хуже). Локи не используют, они в sync живут (lvl0 из последнего поста). полудух6. Go сливает C++; Это может говорить от первого лица только разработчик который писал приложение на С++ потом переписал на Go и сделал свои выводы. Поэтому я-бы воздержался от прямых утрверждений что кто-то что-то сливает. где бы мы были, если бы не доверяли тестам... Ну можете сами всё написать и потестить. Из того что писал я - Go хуже C++ во всех прогах. полудух7. C++ в многопоточности ноздря в ноздрю с Haskell (Haskell это боженька в многопоточности, там вообще 0 сложностей (со слов Ульриха)); Хотелось-бы посмотреть на пример "0 сложностей". Я давно для себя ищу "легкую" мультипоточность. https://www.google.ru/search?q=haskell async example Haskell изи и по коду, и по подводным камням. Erlang такой же, в принципе, но у него чё-то там со счётами хреново... Я слышал, что например JSON конвертнуть дичайше не быстро в нём. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 11:23 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухmaytonпропущено... Непонятно. Что за 30k rps? 38 попугаев. 5 мартышек. ? попугаев. на поток. Ну... я могу и не продолжать дальше. Сложно с вами разговаривать. Я говорю - здрасте! Вы отвечаете - забор покрасте! Зачем это делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 12:12 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
вот это поворот то что я тут подробнейше разжёвываю со ссылками и пояснениями - мимо? да вы зажрались! сложно разговаривать? ну и лесом вас. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 12:26 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Вы приаттачили графический материал который надо просмотреть и осмыслить. Я ещё не успел это сделать. Нужно время. Но на мой первый вопрос вы ответили загадкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 12:32 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonВы приаттачили графический материал который надо просмотреть и осмыслить. Я ещё не успел это сделать. Нужно время. Но на мой первый вопрос вы ответили загадкой. Скорее всего, удается создать 30к фиберов в секунду, каждый из которых отвечает на простой http запрос. Конечно, поток сознания трудно расшифровывать - даже детей учат сначала называть предмет разговора. полудух(sync) не использует никто, годятся только для syncэто как бы вообще класс ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 13:39 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mayton В настоящее время КМК идет переосмысление технологий разработки мультипоточных приложений. Угу. До них таки дошло, что многопоточность это слишком сложно для мозга массового программиста. Поэтому возвращаются к суррогатам, которые попроще, не вызывают гонок и прочих артефактов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 13:53 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Siemargl(sync) не использует никто, годятся только для syncэто как бы вообще класс вообще-то программная модель, целая парадигма maytonВы приаттачили графический материал который надо просмотреть и осмыслить. Я ещё не успел это сделать. Нужно время. Но на мой первый вопрос вы ответили загадкой. Ну так идите и осмысливайте, если для вас "30k rps" это загадка. Как я тут могу ещё помочь, если вы в теме по нулям. Вам дали кучу инфы, сэкономили кучу времени, а вы нос воротите. Некрасиво настолько, что даже неожиданно. Когда-то вы мне помогали разобраться с SQL, а теперь я вам изо всех сил пытаюсь помочь, но, как грится, - "для дальнейшего понимания ознакомьтесь с документацией". ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 15:35 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovmayton В настоящее время КМК идет переосмысление технологий разработки мультипоточных приложений. Угу. До них таки дошло, что многопоточность это слишком сложно для мозга массового программиста. Поэтому возвращаются к суррогатам, которые попроще, не вызывают гонок и прочих артефактов. не переоценивайте свои возможности. программирование как и любая профессия - суть ремесло. просто люди умеют считать деньги и лучше сделать дешево и быстро чем дорого и не факт что сделают вообще. идти по пути наименьшего сопротивления это очевидное движение развития. на ассемблере тоже вполне можно написать вебсервис. но все пишут его явно на чем-то с более высоким уровнем абстракции. почему же многопоточка не должна получить свою абстракцию? должна. и получает. низкоуровневая многопоточка и должна и просто обязана помереть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 16:15 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
В любом случае, алгоритм должен обеспечивать возможность эту самую многопоточность заюзать Какой бы продвинутый язык не был, боюсь сортировку пузырьком он многопоточно на этапе компиляции сделать не сможет ===> нужно использовать другие алгоритмы А многозадачность на уровне HTTP Server или HTTP Proxy давно уже разрешена и, конечно, интересно запилить свой HTTP MPP Server орабатывающий одновременно over 100 тысяч запросов - но кому это надо? Даже с производительность (latency) сетевого IO, все сильно не просто. Например, в Windows, планировщик при RSS, по описанию, должен пытаться конкретные "IO сессии"/"потоки" привязать к своему ядру. Что бы interrupt'ы сразу шли на ядро с прогретым кэшем. А он поймет все эти "новомодные" Akka / Haskel'ы? Или получиться "как всегда", планировщик будет процессы к ядрам "привязывать", а Akka / Haskel'ы специально "отвязывать". Один алгоритм (RSS) масло на бутерброде пытается кучкой собрать, а другой тонко размазать (легкие потоки).... При этом подходе, о производительности и low latency - даже говорить не придется. Только ассемблер, только hardcore ))) На чем, как я понимаю, специализированное железо и выживает. Т.к. скопипастить чипы/технологии типа Infiniband и обозвать Ethernet 10 G - много китайского ума не надо.... но latency, в результате, на порядки (сотни) раз будет отличаться... хотя чипы, фактически "често спизженные" AFAIK Взять например Java NIO. Вроде, по описанию, должно быть "быстрее". А в реальности, и по Интернетам, имеем 10-30% падение производительности по сравнению с обычными Socket'ами. Да... экономим thread'ы... т.ч. если thread'ов не хватает, то нужно NIO. Но вот "быстрее" (в обработки latency одного задания) оно никак не получается ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 16:57 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonПривет друзья. В настоящее время КМК идет переосмысление технологий разработки мультипоточных приложений. Некоторые поинты: 1) Отказ от программирования потока Thread как от единицы параллелизма в бизнес приложениях. Предполагается что event-driven более эффектичен чем масоовые "сидения" потоков в "мониторах". 2) Использование асинхронного вызова (async-call, callable, future, promise) в тех случаях когда это возможно. 3) Пересмотр архитектуры Thread с использованием Fiber (пример project Loom). Кооперативность снова в деле. Continuations (под другим названием). 4) Использование актора (обычно в совокупности с очередями и легковесными потоками). (Akka). Неблокирующие операции. Дешевизна ресурсов. Один нативный поток ОС обслуживает сотни акторов. 5) Использование корутины (coroutines). Использование уступчивого return (yield) (C#,Python) для организации сложных итераторов и генераторов. 6) Функциональный подход в части декомпозиции циклов (for-while) в рекурсии (Erlang) где это (теоретически) даёт возможность гибкого управления кооперативной мультипоточности. 7) Последние экономические тренды в области строительства ЦОД. Отказ от покупки крупных серверов и предпочтение облаков. Микросервисы. 8) Специальные языки где асинхронный I/O выдвинут как feature (Node.JS). Языки - где корутина - фича. Go(goroutine). 9) Некоторые архитектурные ошибки строителей РСУБД которые привели к утилизации процессорных ресурсов на бесполезной синхронизации там где этого можно было избежать вообще (статья Майкла Стоунбрейкера). Пруфы приводить не буду. Топик - просто является неким облаком тегов или смыслов которые я предлагаю обсудить. Если я где-то ошибся - и классифицировал понятия не так - прошу прощения. Я также мог ошибится в связи ЯП и фич. Sorry. Но надеюсь общий смысл будет ясен. P.S. Убежден что поток как единица разработки совершенно необходим в вычислительных задачах с HighLoad-CPU нагрузкой. Особенно где длительное время нет взаимодействия с внешним миром. Есть только взаимодействие АЛУ и memory канала. Но такие задачи достаточно специфичны и в бизнес-приложениях их не много. Какова будет мультипоточность в будущем? Прошу ваши каменты. ИМХО, вопросы производительности и оптимизации часто встают не там, где это нужно. Люди читают о том, как решить проблему 100500+ rps, а по факту у них там и нагрузки-то такой нет. А есть совсем в других местах. Но делаем тут, потому как у Google была тут проблема и они ее решили так. Или доклад с конференции прочитали. К вопросу о "С++ быстрее" и прочих "давай померяемся". Это интересно и важно, но есть два фактора: 1. в 95% приложений абсолютно не нужно. Нет, если вы графический движок, или универсальный сервер пишете ... 2. На производительность часто влияют другие факторы. Реальный код не висит в воздухе, как тесты и примеры. 3. Цифры 5-10-15% вообще ни о чем для не глубоко системного ПО. Завтра оптимизируют компилятор/библиотеки/процессор и будет все наоборот. Основная проблема многопоточности - это зависимости и блокировки. Ошибки (не только баги, но и просчеты в архитектуре) тут очень дороги, а ловить их сложнее. Поэтому ставится задача как-то упростить многопоточные неблокируемые операции, встроить в язык. Я не исключаю, что определенная реализация сложной многопоточности появится в железе с соответствующей поддержкой в языках. Уже сейчас есть НТ, AVX, OpenCL, но они сильно специализированы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 20:02 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудух2. C++ boost::asio включает в себя корутины, асинхронность и вообще всё что нужно. Но ещё есть boost::fibers и у неё тоже есть неплохие показатели; 3. корутины берут простоту синхронного подхода и нивелируют сложности асинхронного подхода, в итоге код становится мягким и шелковистым; Был топик географии 17384728 , где мне понадобилось реализовать Кривую Гилберта. Она реализована как утилита но мне нужен был некий строительный шаблон набодобие Iterator<Point> который по запросу next() выдает следующую координату кривой. Классический алгоритм кривой - рекурсивен. Рекурсия внутри итератора - тот еще головняк. Разваливать его в FSM со стеком мне не хотелось. Нудно да и ошибок можно наделать кучу. А реализация - вот она. Почти работает. После этого у меня появился еще один мотиватор чтобы реализовать красивый строительный элемент. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 21:28 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Addx, подозреваю, что высокоуровневыми абстракциями все проблемы не заткнешь - но стоит пробовать что то нет желающих позаполнять конкретикой мою табличку 21703714 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 21:28 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovmayton В настоящее время КМК идет переосмысление технологий разработки мультипоточных приложений. Угу. До них таки дошло, что многопоточность это слишком сложно для мозга массового программиста. Поэтому возвращаются к суррогатам, которые попроще, не вызывают гонок и прочих артефактов. Наверное дошло когда был замерян % времени который потоки тратят на синхронизацию по отношению к полезной работе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2018, 21:30 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Siemarglчто то нет желающих позаполнять конкретикой мою табличку 21703714 а что там заполнять? поставьте жирную галку в C++ fibers и всё ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 00:26 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Исходить надо из задач, условий, ресурсов. Мультипоточность зачем вообще может быть нужна? Считать? Давно уже. Обрабатывать пользовательские запросы? Другое дело, вот тут был затык, пока не подстуетились разработчики языков, инструментов и компиляторов. Разрабы алгоритмов таки, урааа, обрадовались! Теперь у нас фсё будет, и корутины и асинки и прочая дребедень. И вернулись к сям ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 00:53 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
AddxОсновная проблема многопоточности - это зависимости и блокировки. Ошибки (не только баги, но и просчеты в архитектуре) тут очень дороги, а ловить их сложнее. Поэтому ставится задача как-то упростить многопоточные неблокируемые операции, встроить в язык. Я не исключаю, что определенная реализация сложной многопоточности появится в железе с соответствующей поддержкой в языках. Уже сейчас есть НТ, AVX, OpenCL, но они сильно специализированы. "Основная проблема многопоточности" в следующем: Компьютер выполняет только ОДНУ программу за раз. Точка. (конечный автомат) Программа может быть ЗАГРУЖЕНА В ПАМЯТЬ параллельно с другой, но выполняться будет только одна. Можно переключаться между ними, но тогда это роняет безопасность, т.к. никакой защиты нету. В наши дни программы имеют сотни и тысячи инструкций, что нагружает то самое "бутылочное горлышко" в процессоре - блок разбора инструкций, куда они попадают в первую очередь. И чтобы компьютер не простаивал, а был занят делом постоянно, нужно держать в памяти более 1й программы (этим уже занимается ОС). Тут встаёт вопрос об эффективном распределении ресурсов. Потом появилась идея "а почему бы нам не воткнуть более 1го процессора в систему?" - и вот отсюда пошли проблемы с параллельным программированием (параллелизмом)... У всех процессоров одно и тоже адресное пространство, что означает: каждый процессор может получить доступ к любому биту памяти. Т.е. память ПОЛНОСТЬЮ доступна всем процессорам одинаково. Отсюда растут ноги у всех видов overheads и bottlenecks - попытки решить эти проблемы с эффективным управлением этими процессорами. А самый п....ц наступает при слове "threads". Несколько потоков внутри одного процесса с пересекающимися адресными пространствами (читай: могут править одну и ту же память)... И что тогда делать с планированием? Потоки могут одновременно получить доступ к любому биту, к любой глобальной переменной и как они там будут себя вести - сотрудничать или нет - неизвестно. А ещё потоки они тяжёлые и ими сложно рулить = много не наделаешь. Потоки были представлены, в первую очередь, чтобы эффективно юзать мульти-процессорные системы. Но при этом забыли полностью переосмыслить всю проблему, и это её только усугубило. Расшаривание адресного пространства между процессами это попытка расширить UNIX-модель для решения проблемы. "If you have to write programms which take advantage of parallelism this is where most of the mistakes are made." Очень много нюансов надо держать в голове и поэтому легко наделать ошибок. И ещё больше гемора вылезает, если система real-time. Потому что надо лочить процессы и потоки, разбираться с приоритетами, итд. А ещё очень сложно дебажить многопоточные программы, в особенности потому, что нельзя получить полной точной репликации пройденного программой пути от одного запуска до другого, потому что они всегда движутся, как timing differences... Короче нет тулзов, чтобы это отследить. Единственное, что можно сделать, это запускать программу в постоянном debug-mode, что есть оверхед. И ничего не поделаешь с этим. Можно только признать недостатки этой модели и придумать другую... В общем армии локов это ПЛОХО. Локи это очень ПЛОХО. Гемор это ПЛОХО. И с т.з. ОС локи тоже ПЛОХО, потому что интерфейс, который мы юзаем, это просто набор примитивов, которые не несут сильно много информации для ОС о том, а для чего этот лок. Они никогда не были спроектированы под программы для конечного юзера, они есть низкоуровневые примитивы. Так что в unix-based-системах бОльшую часть времени мы откатываем назад к pthread -интерфейсам (pthread_mutex) и там старые механизмы, и они конечно не лучше. Единственная вещь, которая передаётся с помощью mutex это WORD, который из потока ожидает на указанном локе. Can be attached to one specific action on which the threat is waiting. Но тут опять человечек не сможет разгрести, т.к. придётся оперировать тысячами локов. Это просто невозможно. fibers + coroutines + promises + future = решение всех проблем за 10% от скорости (которая нужна только Nginx & Co). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 01:04 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 08:31 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
локи может и плохо но есть мнение, что алгоритмы на локах построить заметно проще, чем лок-фри решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 12:58 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
hVostt...Обрабатывать пользовательские запросы? Другое дело, вот тут был затык, пока не подстуетились разработчики языков, инструментов и компиляторов. Тупые Java Servlets, там часто встретишь sincronize ? - нет Но обрабатывать множество пользовательских запросов - это нисколько не мешает. Поол worker'ов на уровне Apache Tomcat или другого app server'а. СУБД - аналогично. Разошлись по пользователям и 95% времени живем счастливо (желание многозадачности только при батч расчетах может возникнуть 1-2 раза в месяц). Для бизнес-программиста (OeBS,FoxPro,PB,MS Access etc), thread и прочая многозадачность, в 99 % случаях не нужна. Поэтому когда приходишь устраиваться на работу, дикларируется что команда собирается писать __учетный софт__ для учета сертификатов сваршиков, а требования: threads, blockchain.... Блин... Это не IT, это чистая наука. Удовлетворения своего любобытства за чужой счет. В классической науке - за счет государства, в таких "проектах" - за счет заказчика. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 13:19 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудух, У меня 4-х ядерный комп, что дома что на службе. Если запускаю долгий макрос в эселе, то грузится 25% проца. Смотрю в диспетчере - работают преимущественно 1-2 ядра. Чессгря, не знаю мож и одна только команда способна выполниться одномоментно, а мож и нет. Только, когда я работал не на персоналках, у нас были по-настоящему многопроцессорные компы, полностью синхронные, с неск арифметиками и неск доступами в память (правда не к одному адресу). А сложность лично я вижу не только вблокировках и т.п., а в теории,т.е. в синхронизации точек ветвления алгоритма, особенно для одной задачи, если её распараллеливать. Точки ветвления - большая теоретическая проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 13:36 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Вот это отмечу как полезный приём. полудух Асинхронная многопоточность нужна нам, чтобы победить IO (операции, которые требуют ожидания) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 13:46 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
exp98Вот это отмечу как полезный приём. полудух Асинхронная многопоточность нужна нам, чтобы победить IO (операции, которые требуют ожидания) Не все так однозначно ( C ) Дочь офицера В low-latency IO даже на аппаратном уровне __уходят__ от прерываний (аппаратный аналог асинхронности). Т.ч. latency - слишком большое и ассинхроность сильно дорого (например параметр interrupt moderation у сетевых карт). У Intel команада open source пытается для Ethernet card востановить/допилить старые драйвера от FreeBSD с целью получить low latency. Без прерываний, просто тупой пулинг (цикл: while (true) { проверить_карту; обработать_пакет; } ) Про то, что NIO на практике 10-30 % (скорее 10) медленнее старых Socket'ов - уже приводил. А 10% не так уж и мало. К тому же, если расматривать комплекс проблем целиком, то сейчас все High Performance сервера - NUMA. "Побеждать IO" за счет "в 2-3 раза затормозить/убить RAM" - как-то на мой взгляд сильно накладно. С той же самой NIO, была проблема, что на __реальном__ сервере (NUMA, 2 CPU, 40 cores), от патерна нагрузки NIO + Java менеджеру потоков в Linux голову снесло. Перевод проекта Socket --> NIO привел к увеличению в 3-4 __раза__ потребления CPU. Вылечилось уменьшением кол-ва потоков для java GC и java JIT через командную строчку. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 14:06 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonНаверное дошло когда был замерян % времени который потоки тратят на синхронизацию по отношению к полезной работе. Но вместо того, чтобы рихтовать руки разработчикам, втыкающим синхронизацию туда куда не нужно, решили отказаться от многопоточности. Логично, это же путь наименьшего сопротивления. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 14:07 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevВ low-latency IO даже на аппаратном уровне __уходят__ от прерываний (аппаратный аналог асинхронности). Т.ч. latency - слишком большое и ассинхроность сильно дорого (например параметр interrupt moderation у сетевых карт).Когда эта проблема возникла впервые - были времена пень-три. Для них, да: максимальная частота прерываний от стомегабитного езернета - "немножко множко" и выделить отдельный процессор SMP-железки для работы в режиме опроса будет дешевле. Ну дык, для гигабитного езернета эту проблему решили на протокольном уровне (burst-mode) - можно передать и принять пачку езернет-кадров "на одном дыхании". Процессоры, опять-таки, и частоты повысили и задержки уменьшили. Но тут подоспел Ethernet 10/40/100G и проблема возникла снова. Даже для быстрых процессоров. Это всё тот же характерный пример: решаем проблему, которая нас вообще не касается. P.S. Посмотрел гитхаб с асинхронной обработкой http-запроса в хаскеле и так и не понял, почему эта кучка кода проще двух строчек асинхронных ява-сервлетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 17:24 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
exp98полудух, У меня 4-х ядерный комп, что дома что на службе. Если запускаю долгий макрос в эселе, то грузится 25% проца. Смотрю в диспетчере - работают преимущественно 1-2 ядра. Чессгря, не знаю мож и одна только команда способна выполниться одномоментно, а мож и нет. Только, когда я работал не на персоналках, у нас были по-настоящему многопроцессорные компы, полностью синхронные, с неск арифметиками и неск доступами в память (правда не к одному адресу). ну так: полудух1. говоря об асинхронной многопоточности подразумеваем Linux/Unix; microsoft же - синоним "как из мухи сделать 50-этажного слона" авторПредыдущий оратор, который убеждал нас пользоваться библиотекой Microsoft Foundation Class (MFC), сказал нам, что поддержка OLE в MFC "включает 20000 строк кода, _необходимых_ для каждого базового приложения OLE 2.0". Аудитория была ошеломлена не полезностью MFC, а тем фактом, что для написания базового приложения OLE 2.0 требуется 20000 строк кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 19:28 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Basil A. SidorovP.S. Посмотрел гитхаб с асинхронной обработкой http-запроса в хаскеле и так и не понял, почему эта кучка кода проще двух строчек асинхронных ява-сервлетов. зацените, как ява любит память ... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 19:33 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Не забывай про свой процессор в сетевой и райде - именно они обрабатывают прерывания. на основной проц это не ложится полудухполудух1. говоря об асинхронной многопоточности подразумеваем Linux/Unix; microsoft же - синоним "как из мухи сделать 50-этажного слона" авторПредыдущий оратор, который убеждал нас пользоваться библиотекой Microsoft Foundation Class (MFC), сказал нам, что поддержка OLE в MFC "включает 20000 строк кода, _необходимых_ для каждого базового приложения OLE 2.0". Аудитория была ошеломлена не полезностью MFC, а тем фактом, что для написания базового приложения OLE 2.0 требуется 20000 строк кода. Кстати, в Линухе что, появился асинхронный в/в к блок девайсам? В Вин есть. И ты цитируешь как бы не 20-летнюю проблему. Сейчас 20000 строк в стандартной библиотеке явы или буста - пшик. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 19:51 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухзацените, как ява любит память ...В первой строчке она любит её меньше, чем це-с-крестами. В остальных - больше, но вопрос остаётся прежним: какую проблему решаем? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 20:37 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
SiemarglНе забывай про свой процессор в сетевой и райде - именно они обрабатывают прерывания. на основной проц это не ложитсяСейчас много где собственные процессоры - в жёстких дисках, например. Иногда - многоядерные. Главное - не забывать, что сетевое оборудование делается так, чтобы почти всё выполняло специализированное железо. Как только нагрузка ложится на процессор сетевого устройства в хоть сколько-нибудь товарных объёмах - сеть падает. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 20:42 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, последнюю сентенцию не оценил ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 21:35 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
[quote Siemargl]полудухпропущено... microsoft же - синоним "как из мухи сделать 50-этажного слона" нет там нихрена. Всё либо эмуляция, либо маркетинг. армия индусов не способна написать ничего качественного ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 22:44 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Basil A. Sidorovполудухзацените, как ява любит память ...В первой строчке она любит её меньше, чем це-с-крестами. В остальных - больше, но вопрос остаётся прежним: какую проблему решаем? Я не понял в чем был смысл этого сообщения? Какой вопрос обсуждается? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 23:12 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonполудух2. C++ boost::asio включает в себя корутины, асинхронность и вообще всё что нужно. Но ещё есть boost::fibers и у неё тоже есть неплохие показатели; 3. корутины берут простоту синхронного подхода и нивелируют сложности асинхронного подхода, в итоге код становится мягким и шелковистым; Был топик географии 17384728 , где мне понадобилось реализовать Кривую Гилберта. Она реализована как утилита но мне нужен был некий строительный шаблон набодобие Iterator<Point> который по запросу next() выдает следующую координату кривой. Классический алгоритм кривой - рекурсивен. Рекурсия внутри итератора - тот еще головняк. Разваливать его в FSM со стеком мне не хотелось. Нудно да и ошибок можно наделать кучу. А реализация - вот она. Почти работает. После этого у меня появился еще один мотиватор чтобы реализовать красивый строительный элемент. Друзья. Топик - сложный и многогранный. Я форкну отдельное обсуждение по корутинам (сопрограммам). Я возьму штук 3-5 ЯП и промоделирую итератор Гильберта. Особо меня интересует перформанс и как оно реализовано с практической точки зрения. Прошу прощения что я беру такую специфичную задачу но у меня в наличии пока ничего другого нет. Если у вас есть предложения - рад послушать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 23:17 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevТупые Java Servlets, там часто встретишь sincronize ? - нет Но обрабатывать множество пользовательских запросов - это нисколько не мешает. Поол worker'ов на уровне Apache Tomcat или другого app server'а. Пул воркеров без асинхронных операций, КПД ниже плинтуса. Leonid KudryavtsevСУБД - аналогично. Разошлись по пользователям и 95% времени живем счастливо (желание многозадачности только при батч расчетах может возникнуть 1-2 раза в месяц). Аналогично. Многозадачность многопользовательская. В остальном, параллелить алгоритмы? Бог ты мой, какие? И какая ценность у них в их шаткой нифига не тестируемой и зачастую кривой реализации? Нет, ну конечно, видосы рендерить и сапромат считать -- великое дело. Главное, чтобы к майнингу не свелось ))) Leonid KudryavtsevДля бизнес-программиста (OeBS,FoxPro,PB,MS Access etc), thread и прочая многозадачность, в 99 % случаях не нужна. .. была не нужна, так как слишком дорого обходилось. Сейчас обходится дёшево. Ну как. Знания и понимание нужны, а с ними в любой год туго. Другое дело, что реализация стала достижимой с точки зрения стоимости и трудозатрат. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2018, 02:37 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
hVosttLeonid KudryavtsevТупые Java Servlets, там часто встретишь sincronize ? - нет Но обрабатывать множество пользовательских запросов - это нисколько не мешает. Поол worker'ов на уровне Apache Tomcat или другого app server'а. Пул воркеров без асинхронных операций, КПД ниже плинтуса. Пул воркеров без асинхронных операций, КПД ниже плинтуса. - вообще не понял, что эти слова значат hVosttLeonid KudryavtsevСУБД - аналогично. Разошлись по пользователям и 95% времени живем счастливо (желание многозадачности только при батч расчетах может возникнуть 1-2 раза в месяц). Аналогично. Многозадачность многопользовательская. В остальном, параллелить алгоритмы? Бог ты мой, какие? И какая ценность у них в их шаткой нифига не тестируемой и зачастую кривой реализации? Нет, ну конечно, видосы рендерить и сапромат считать -- великое дело. Главное, чтобы к майнингу не свелось ))) Leonid KudryavtsevДля бизнес-программиста (OeBS,FoxPro,PB,MS Access etc), thread и прочая многозадачность, в 99 % случаях не нужна. .. была не нужна, так как слишком дорого обходилось. Сейчас обходится дёшево. Ну как. Знания и понимание нужны, а с ними в любой год туго. Другое дело, что реализация стала достижимой с точки зрения стоимости и трудозатрат. Не все Ваши мысли понял. Т.ч. просто попытаюсь пояснить свою Для БИЗНЕС приложений, в 99 % случаев многозадачность решается на уровне системного софта. Есть Apache Tomcat, Weblogic, WebSphere, Oracle etc - там есть пул-потоков, локи, латчи и так далее. С многозадачностью все хорошо. Прикладного программиста это ни сколько не касается. Если говорить о математике и расчетах в кластерах - то, насколько я знаю, там опять таки СПЕЦИАЛИЗИРОВАННЫЕ средства, имеющие достаточно мало общего с перечисленными в первом сообщении. В том числе, можно и про CUBE и расчетах на MMX/SSE/GPU вспомнить. Т.ч. между вопросома вида "легкие потоки vs lock'и" и БИЗНЕС потребностями математиков опять таки прямой связи нет. Если же мы говорим о СИСТЕМНОМ софте, то тогда нужно расматривать ВЕСЬ стек. Начиная от процессора и кончая нашим кодом. А вот тут то, совершенно не ясно, насколько высокоуровнивые концепции эффективно ложаться на технические средства (OS). Особенно на современные технические средства (low latency network/RSS, NUMA, хитрые алгоритмы диспетчера потоков OS) Т.ч. сама проблема и термин "будущая мультипоточность" лично мне не так очевидна и не очень понятна. Мультипоточность где и для чего? И что этой мультипоточностью хотят достигнуть. P.S. Сам написал и сразу же в голову пришла такая доля рынка как написание игр. Но, подозреваю, там тоже какие-то свои специализированные системы/скрипты написания AI. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2018, 18:30 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Если же говорить про "переосмысления технологий разработки" То одно из основных требований: 1. Оно должно быть максимально ПОНЯТНО и максимально естественно для человека. 2. Оно должно быть понятно компьютеру. Т.е. более менее легко ложиться на современные технические средства Все остальное: многопоточность / не многопоточность - глубоко пофиг. Будет средство решать прикладные задачи "интуетивно понятным" образом - им будут пользоваться. Будет решать интуетивно "узкому кругу лиц" понятным образом - этот "узкий круг" и будет им пользоваться, а остальные останутся ретроградами и будут пользоваться java, delphi и так далее. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2018, 18:40 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevТ.ч. сама проблема и термин "будущая мультипоточность" лично мне не так очевидна и не очень понятна. Мультипоточность где и для чего? И что этой мультипоточностью хотят достигнуть. полудух Код: plaintext 1.
эта проблема встречается в любых задачах. зы: много воды льёте ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2018, 18:52 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухпобедить I/O (операции, которые требуют ожидания). эта проблема встречается в любых задачах. Уже написал. По сетевому IO Тяпничная будущая мультипоточность 1) побеждали, побеждали... Но Java NIO на практике на 10-30% медленнее обычных thread на socket'ах. И это факт 2) кроме того, кроме собственно ожиданий, есть проблема диспетчеризации работы на ядра процессоров/ноду, особенно в NUMA. Т.ч. легким движением руки можем "победить IO" (см. п.1), но при этом полностью угробить скорость доступа к RAM (т.е. просесть в 3-4 раза _на_всех_ командах процессора) Т.ч. профит от такой победы не очень понятен. полудухзы: много воды льёте Скучно... что же еще на форуме делать ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2018, 19:08 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
на тестах что-то не видно "полностью угробленной скорости доступа к RAM" ) чтобы не проседать надо не перегружать L1/L2 cache - в нём вся скорость т.е. всякие инлайны не собирать в цикле, например ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2018, 22:00 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Форкнул отдельно тему с coroutines 21708273 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2018, 22:01 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Немного вернемся к этому. полудух4. stackfull корутины без ниток (fibers) дают ~30k rps на поток; Откуда цифра? Потому что у меня например на порядок выше на простой виртуалке - 350 Krps. Тест кейс - одна корутина передает другой сообщение в 32 байта через io_service (Asio) и принимает обратно ответ. Следующее сообщение посылается после получения ответа. Все в одном потоке. При этом я вижу что при передаче HTTP между двумя процессами (в одном потоке на процесс) действительно 30 Кrps, но из предудущего теста видно что это не лимит корутин, как следует из вашего сообщения. Просто на данной комбинации софта и харда получается такая скорость обработки HTTP (аллокации, IPC, TCP и другие оверхеды). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 14:17 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
цифра из тех видео, что в том же посте , и следующее за ним. Там в каждом вроде свои тесты есть где взять кошерный, самый честный/чистый/профессиональный тест между C++ и Haskell/Erlang я не знаю ( прямо чтобы профи со знанием дела одно и то же потестили ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 14:38 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
anyway, coroutines + fibers + future это самое быстрое соотношение скорости и лёгкости кода быстрее только опускаться ниже этих абстракций, но прирост будет всего %10 это очень быстрое решение для сотен тысяч и даже миллионов rps у вас 350к на 1 поток? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 14:43 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудуху вас 350к на 1 поток? Ну да, я же выше написал условия теста. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 15:11 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
хм, вы там случайно Nginx не обогнали? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 15:58 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудуххм, вы там случайно Nginx не обогнали? А причем здесь nginx? 350krps - это просто передача небольших массивов байтов туда сюда без какой либо обработки. А вот HTTP у нас намного медленнее приведенных результатов nginx. 30krps в одном потоке и до 700 Кrps на 40 ядрах (c HT) . У nginx чуть больше 2 Mrps для такого же кол. ядер, судя по вашей ссылке. Разница - 3х. Да, корутины и всякие С++ вкусности имеют свою цену ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 17:25 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Ну а в том синтетическом тесте в 40 потоков конечно обошли nginx - 12 Mrps Жалко что это не HTTP ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 17:30 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудух, Кстати, я посмотрел видос от David Sackstein, и из него не следует что нити (fiber) быстрее чем корутины. Потому что внутри это одно и то же - и там и там - переключение стека через Context. В видосе сравниваются только потоки с нитями, а не нити с корутинами. Откуда у вас взялась цифра 30Krps так и не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 18:30 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
ну 30к рпс это именно про HTTP, насколько я помню а откуда именно уже не помню и кто там и как тестил это тоже вопрос... по мне так это мало. нитки кооперируются с корутинами. Он же вот что говорил: автор# FIBERS Логический поток выполнения. И ему нужен Scheduler (планировщик потоков выполнения). * A fiber is a userland thread - a thread of execution that is scheduled cooperatively (main difference between fiber and thread). * The library is organized as coroutines + manager + scheduler. * Each fiber has its own stack. * Like Boost Coroutine the library uses Boost Context to allocate and switch between stacks. * Tou can choose the stack allocation strategy. The default is fixed size. The size itself is configurable. # fibers vs threads * At most one fiber on a thread can be running; * Therefore a fiber does not need to protect resources from other fibers running on the same thread; * However, if a fiber on another thread access the resource - protection is required; * Spawning fibers does not distribute your computation across more hardware cores; * But fibers do help you manage the division between working and waiting on a thread. # manager * A fiber can be in the running, suspended or ready state; * The running fiber can call the manager to yield or suspend itself: - when a fiber yields it moves to the ready state; // yield = оставить тред и заниматься своими делами, пока он не даст сигнал. Тогда сделать resume. - when a fiber suspend it moves to a suspended state; * In both cases the manager uses a scheduling algorithm to select another ready fiber to run; * The manager performs a context switch to the selected fiber; * If there were no ready fibers, manager blocks the thread; * Context switching is direct, the manager runs on the source fiber. # Scheduler Algorithm (46:35): * There is one scheduler algorithm for all fibers in a thread; * The scheduler's responsibility is to pick one of the ready fibers that should to run; * The default is a round-robin scheduler among the ready fibers on the thread; * So, by default a fiber will always be resumed on the thread where it was created; * A blocked fiber can hovewer be awoken by another thread. * The scheduling algorithm is an extension point. You can also implement and install your own. * You can also install others provided by the library for instance: - shared_work: ready fibers from all threads are treated equally; - work_stealing: local ready fibers are selected if any, otherwise a fiber is stolen from another scheduler. * Note that these algorithms migrate fibers between threads which requires care in protecting shared resources. # Fiber Suspension * A fiber can yield itself or it can suspend itself (a.k.a. block) in a number of ways: - it can request to sleep (until a time or for a specified duration); - use fiber synchronization objects that are defined in the library (mutexes, conditional variables and so on). * The semantic of the synchronization object are similar to those in the std::thread library, however: - the fiber types suspend only the current fiber. They do not block the thread (unless there are no other fibers to run). есть ещё такое видео: ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 19:13 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудух "Основная проблема многопоточности" в следующем: Компьютер выполняет только ОДНУ программу за раз. Точка. (конечный автомат) На таком низком уровне слова "компьютер" и "программа" теряют смысл. Нужно оперировать понятиями набор инструкций, кэш, спекулятивное исполнение, межядерное взаимодействие, канальность памяти. полудухПрограмма может быть ЗАГРУЖЕНА В ПАМЯТЬ параллельно с другой, но выполняться будет только одна. Даже команды одного потока могут исполняться параллельно. Спекулятивное исполнение называется. Что уж говорить о процессах, которые иногда не просто исполняются параллельно, а и аппаратные ресурсы (память, диск, видеокарта) используют также параллельно. полудухМожно переключаться между ними, но тогда это роняет безопасность, т.к. никакой защиты нету. В наши дни программы имеют сотни и тысячи инструкций, что нагружает то самое "бутылочное горлышко" в процессоре - блок разбора инструкций, куда они попадают в первую очередь. И чтобы компьютер не простаивал, а был занят делом постоянно, нужно держать в памяти более 1й программы (этим уже занимается ОС). Тут встаёт вопрос об эффективном распределении ресурсов. Потом появилась идея "а почему бы нам не воткнуть более 1го процессора в систему?" - и вот отсюда пошли проблемы с параллельным программированием (параллелизмом)... У всех процессоров одно и тоже адресное пространство, что означает: каждый процессор может получить доступ к любому биту памяти. Т.е. память ПОЛНОСТЬЮ доступна всем процессорам одинаково. Отсюда растут ноги у всех видов overheads и bottlenecks - попытки решить эти проблемы с эффективным управлением этими процессорами. А самый п....ц наступает при слове "threads". Несколько потоков внутри одного процесса с пересекающимися адресными пространствами (читай: могут править одну и ту же память)... И что тогда делать с планированием? Потоки могут одновременно получить доступ к любому биту, к любой глобальной переменной и как они там будут себя вести - сотрудничать или нет - неизвестно. А ещё потоки они тяжёлые и ими сложно рулить = много не наделаешь. Потоки были представлены, в первую очередь, чтобы эффективно юзать мульти-процессорные системы. Но при этом забыли полностью переосмыслить всю проблему, и это её только усугубило. Расшаривание адресного пространства между процессами это попытка расширить UNIX-модель для решения проблемы. "If you have to write programms which take advantage of parallelism this is where most of the mistakes are made." Очень много нюансов надо держать в голове и поэтому легко наделать ошибок. И ещё больше гемора вылезает, если система real-time. Потому что надо лочить процессы и потоки, разбираться с приоритетами, итд. А ещё очень сложно дебажить многопоточные программы, в особенности потому, что нельзя получить полной точной репликации пройденного программой пути от одного запуска до другого, потому что они всегда движутся, как timing differences... Короче нет тулзов, чтобы это отследить. Единственное, что можно сделать, это запускать программу в постоянном debug-mode, что есть оверхед. И ничего не поделаешь с этим. Можно только признать недостатки этой модели и придумать другую... У Вас сплошная путаница. Перемешаны вопросы архитектуры железа, ОС, алгоритмов. В процессоре нет "бутылочных горлышек". Есть менее используемые блоки, есть более. Например блок работы с AVX инструкциями обычно "менее загружен". К любому биту получить доступ нельзя, есть защита памяти. Аппаратная, кстати, дополнительных ресурсов на проверки выделять не нужно. Каждому процессу доступна только своя память. Внутри же процесса проблема "thread safe" решается стандартными способами, не нужно изобретать велосипеды. Активно взаимодействующие потоки даже на разных ядрах общаются через очень быстрый кэш, не залезая в память, абсолютно прозрачно для них. А конкретная реализация потоков - это не проблема компьютера или процессора, это проблема ОС. И в целом она вполне справляется. Не во всех сценариях, но все же. полудухВ общем армии локов это ПЛОХО. Локи это очень ПЛОХО. Гемор это ПЛОХО. И с т.з. ОС локи тоже ПЛОХО, потому что интерфейс, который мы юзаем, это просто набор примитивов, которые не несут сильно много информации для ОС о том, а для чего этот лок. Они никогда не были спроектированы под программы для конечного юзера, они есть низкоуровневые примитивы. С т.з. ОС сами локи - не ее проблемы. ОС все равно, для чего этот лок, ее задача обеспечить, а не угадать. полудухТак что в unix-based-системах бОльшую часть времени мы откатываем назад к pthread -интерфейсам (pthread_mutex) и там старые механизмы, и они конечно не лучше. Единственная вещь, которая передаётся с помощью mutex это WORD, который из потока ожидает на указанном локе. Can be attached to one specific action on which the threat is waiting. Но тут опять человечек не сможет разгрести, т.к. придётся оперировать тысячами локов. Это просто невозможно. fibers + coroutines + promises + future = решение всех проблем за 10% от скорости (которая нужна только Nginx & Co). Часто локов можно избежать на архитектурном уровне при построении приложения. Я хотел сказать именно об этом. А "решение всех проблем" - это, скажем так, слишком смелое заявление. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 19:59 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
AddxУ Вас сплошная путаница. не у меня, а у человека, который пишет компиляторы и на ночь читает чертежи процессоров. Ulrich Drepper зовут. но у вас конечно аппаратура лучше В процессоре нет "бутылочных горлышек". есть. помимо блока инструкций, ещё например кэш сегодняшние процессоры по скорости ~ такие же, как были в 80е годы всё решает кэш. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 20:38 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухне у меня, а у человека, который пишет компиляторы и на ночь читает чертежи процессоров. Ulrich Drepper зовут. Ну, он еще PulseAudio создал. А это большой минус в карму )) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2018, 20:43 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухне у меня, а у человека, который пишет компиляторы и на ночь читает чертежи процессоров. Ulrich Drepper зовут. но у вас конечно аппаратура лучше Всегда удивляли люди, которые говорят от имени других людей. полудух В процессоре нет "бутылочных горлышек". есть. помимо блока инструкций, ещё например кэш сегодняшние процессоры по скорости ~ такие же, как были в 80е годы всё решает кэш. Бред сивой кобылы. Нынешние процы даже на равной частоте рвут "процы 80х" как Тузик грелку. И да, если считать кэш узким местом, то тогда уж лучше память считать таковым. Да ладно память, лучше диск. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2018, 12:29 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Addxполудухне у меня, а у человека, который пишет компиляторы и на ночь читает чертежи процессоров. Ulrich Drepper зовут. но у вас конечно аппаратура лучше Всегда удивляли люди, которые говорят от имени других людей. это лучше, чем нести ахинею от своего имени. Внезапно всегда есть специалисты, которые лучше знают тему. Нынешние процы даже на равной частоте рвут "процы 80х" как Тузик грелку. благодаря кэшу. И да, если считать кэш узким местом, то тогда уж лучше память считать таковым. Да ладно память, лучше диск. ) уж лучше жевать, чем говорить. Вы даже не понимаете сути. Кэш узкое место, потому что его очень легко заполнить и тогда проц станет тормозить. Диск тут рядом не стоял, как и память. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2018, 14:49 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухКэш узкое место, потому что его очень легко заполнить и тогда проц станет тормозить. А кеш процессора бывает не заполненный? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2018, 16:38 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
clihltи почему вдруг процессор начнет тормозить если кеш полон? Ну если программа написана левой ногой, то почему бы и нет Но конечно не кэш узкое место, а внешняя память. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 12:46 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
clihltДа я ж спросил всего то ). В каких случаях кеш вообще бывает не заполненным (ну кроме старта проца) и почему вдруг процессор начнет тормозить если кеш полон? любая программа это поток инструкций, которые помещаются в кэш, который находится внутри процессора и ему ничего не стоит в него сходить ежели он заполнится, то инструкции будут помещаться уже во внешнюю память, до которой ему идти в десятки, а то и сотни раз дольше такая же ситуация, как между памятью и диском (там в тысячи раз разница) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 16:27 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Давайте мысль подкину. Каковы накладные расходы на сидение потока (pthread) в mutex? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 18:25 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухclihltДа я ж спросил всего то ). В каких случаях кеш вообще бывает не заполненным (ну кроме старта проца) и почему вдруг процессор начнет тормозить если кеш полон? любая программа это поток инструкций, которые помещаются в кэш, который находится внутри процессора и ему ничего не стоит в него сходить ежели он заполнится, то инструкции будут помещаться уже во внешнюю память, до которой ему идти в десятки, а то и сотни раз дольше такая же ситуация, как между памятью и диском (там в тысячи раз разница) С кэшированием кода все гораздо проще чем с кэшированием данных. Тут проблемы что данные тупо не влезли (по размеру) в кэш, и что данные меняются несколькими потоками (ядрами) одновременно, т.е. кэш ядра постоянно становится невалидным. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 20:20 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухclihltДа я ж спросил всего то ). В каких случаях кеш вообще бывает не заполненным (ну кроме старта проца) и почему вдруг процессор начнет тормозить если кеш полон? любая программа это поток инструкций, которые помещаются в кэш, который находится внутри процессора и ему ничего не стоит в него сходить ежели он заполнится, то инструкции будут помещаться уже во внешнюю память, до которой ему идти в десятки, а то и сотни раз дольше такая же ситуация, как между памятью и диском (там в тысячи раз разница) значит надо по уму помещать в кеш, а не всю х..ню ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 20:30 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonДавайте мысль подкину. Каковы накладные расходы на сидение потока (pthread) в mutex? там где много корутин + fibers мьютексы не рекомендуются ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 21:00 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
ViPRosзначит надо по уму помещать в кеш, а не всю х..ню в асинхронном программировании так можно и двинуться умом ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 21:01 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухmaytonДавайте мысль подкину. Каковы накладные расходы на сидение потока (pthread) в mutex? там где много корутин + fibers мьютексы не рекомендуются Чтобы обосновано продолжить судить классическую мультипоточность нужно увидеть ее недостатки. Какие аргументы могут быть самыми убедительными? - Сгорание в топке процессора мегафлопов которые расходуются не на полезную работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 21:02 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухViPRosзначит надо по уму помещать в кеш, а не всю х..ню в асинхронном программировании так можно и двинуться умом нет проблемы "асинхронного программирования", есть проблема "синхронизации" процессов (задач, операций,...). сейчас воще под "асинхронным" программированием стали подразумевать вызов подпрограмм ввода/вывода и запутали народ вконец ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 21:22 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
ViPRosполудухпропущено... в асинхронном программировании так можно и двинуться умом нет проблемы "асинхронного программирования", есть проблема "синхронизации" процессов (задач, операций,...). сейчас воще под "асинхронным" программированием стали подразумевать вызов подпрограмм ввода/вывода и запутали народ вконец Чисто эстетически... Писать код с асинхронными вызовами легче чем "на потоках". И ошибок меньше. Я здесь говорю безотносительно I/O. А вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 22:39 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonViPRosпропущено... нет проблемы "асинхронного программирования", есть проблема "синхронизации" процессов (задач, операций,...). сейчас воще под "асинхронным" программированием стали подразумевать вызов подпрограмм ввода/вывода и запутали народ вконец Чисто эстетически... Писать код с асинхронными вызовами легче чем "на потоках". И ошибок меньше. Я здесь говорю безотносительно I/O. А вообще. это когда под рукой абстракции вроде корутин и ниток а в оригинале ваще не легче ) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2018, 23:07 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Addx ИМХО, вопросы производительности и оптимизации часто встают не там, где это нужно. Люди читают о том, как решить проблему 100500+ rps, а по факту у них там и нагрузки-то такой нет. А есть совсем в других местах. Но делаем тут, потому как у Google была тут проблема и они ее решили так. Или доклад с конференции прочитали. К вопросу о "С++ быстрее" и прочих "давай померяемся". Это интересно и важно, но есть два фактора: 1. в 95% приложений абсолютно не нужно. Нет, если вы графический движок, или универсальный сервер пишете ... 2. На производительность часто влияют другие факторы. Реальный код не висит в воздухе, как тесты и примеры. 3. Цифры 5-10-15% вообще ни о чем для не глубоко системного ПО. Завтра оптимизируют компилятор/библиотеки/процессор и будет все наоборот. Основная проблема многопоточности - это зависимости и блокировки. Ошибки (не только баги, но и просчеты в архитектуре) тут очень дороги, а ловить их сложнее. Поэтому ставится задача как-то упростить многопоточные неблокируемые операции, встроить в язык. Я не исключаю, что определенная реализация сложной многопоточности появится в железе с соответствующей поддержкой в языках. Уже сейчас есть НТ, AVX, OpenCL, но они сильно специализированы. Полностью согласен. Особенно с выделенным. Очень часто разработчики и менеджеры занимаются не той оптимизацией, которая действительно нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2018, 18:10 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevexp98Вот это отмечу как полезный приём. пропущено... Про то, что NIO на практике 10-30 % (скорее 10) медленнее старых Socket'ов - уже приводил. А 10% не так уж и мало. С той же самой NIO, была проблема, что на __реальном__ сервере (NUMA, 2 CPU, 40 cores), от патерна нагрузки NIO + Java менеджеру потоков в Linux голову снесло. Перевод проекта Socket --> NIO привел к увеличению в 3-4 __раза__ потребления CPU. Вылечилось уменьшением кол-ва потоков для java GC и java JIT через командную строчку. Можно по этим двум пунктам ссылку на исследование? Хотя бы на первое - а то в этом треде я ссылки не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2018, 18:21 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
[spoiler] ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2018, 16:08 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
qastaLeonid Kudryavtsevпропущено... Про то, что NIO на практике 10-30 % (скорее 10) медленнее старых Socket'ов - уже приводил. А 10% не так уж и мало. С той же самой NIO, была проблема, что на __реальном__ сервере (NUMA, 2 CPU, 40 cores), от патерна нагрузки NIO + Java менеджеру потоков в Linux голову снесло. Перевод проекта Socket --> NIO привел к увеличению в 3-4 __раза__ потребления CPU. Вылечилось уменьшением кол-ва потоков для java GC и java JIT через командную строчку. Можно по этим двум пунктам ссылку на исследование? Хотя бы на первое - а то в этом треде я ссылки не нашел. Я написал - на практике. 1) Если хотите, возмите и напишите нормальный тест, лучше, прикладную систему портируете Если хотите, возьмите какую нибудь NIO библиотеку типа Apache Http Core и посмотрите, сколько там в NIO режиме копирований туда-сюда-обратно тебе и мне приятно между char[] и ByteBuffer. Сколько там работы с коллекциями внутри самой библиотеки (т.к. мы то код можем пишем и "ассинхронный", а вот библиотека все Channel'ы вынуждена хранить в обычной java-коллекции и по ним бегать, что бы понять какие мы обработали, а какие channel'ы еще нет). плюс, самостоятельно напишите ассинхронный Producer, который данные между Вашим ядром будет в NIO отправлять. Добавьте, на сколько в Вашей системе станет больше One Producer One Consumer Queue (при том, что таких оптимизированный Queue даже в Java нет, или concurrentLinkedQueue - который попа боль, т.к. там нет size, или какой нибудь сторонний bounded collection, что бы ошибки переполнения буффера можно было бы хотя бы определять /если клиент очень медленно данные забирает, например у него модем 2400 бод ))) / ). Еще пара коллекций и туда-сюда-через-Queue-передали данные скорости не добавляет В принципе, можете блоги в Инет почитать. Про пинус 10-30% скорости пишут очень многие 2) почему медленнее. В общем то понятно. В случае сокитов, ВСЯ синхронизация выполняется системным ядром ОС. В случае NIO, вся синхронизация выполняется "руками" в NIO библиотеке и наших Producer'ах. Native OS vs Java 3) Про проблему на сервере, уже не раз писал. Просто столкнулся. Какую Вам ссылку дать, не очень понятно. Точно знаю, что он где-то в Англии, на лондонской бирже стоит ))) если туда у Вас есть доступ, могу тогда сказать фирму-арендатор, сходите на железку посмотрите, хоть мне раскажите, как она выглядит ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2018, 19:32 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonКаковы накладные расходы на сидение потока (pthread) в mutex? До нескольких сотен тактов на переключение процессов. Если переключение происходит часто (миллион в секунду), то десятки процентов времени проц тупо перечитывает кэши. Но так убивать эффективность могут только дауны (начинающие программисты). Поэтому в нормальных случаях такого не наблюдается. maytonЧисто эстетически... Писать код с асинхронными вызовами легче чем "на потоках". И ошибок меньше. Эстетичность вы оцените, когда станете писать асинхронно с рекурсивной вложенностью, да плюс пяток-другой вложенность нерекурсивная. Скажем дружно - нахер нужно (нужна) такая эстетика. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 15:48 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
В целом уже было озвучено мнение - руки нужно от искривления лечить некоторым пейсателям, а не решать проблему заменой языка. Сложность никуда не девается. В этом проблема. Она прячется новомодным язычком под ковёр, но тут же вылазит в другом месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 15:51 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
alex55555, а где что вылазит? boost::asio, boost::fiber, boost::coroutine2 - работают же ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 16:54 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухalex55555, а где что вылазит? boost::asio, boost::fiber, boost::coroutine2 - работают же В ваших тривиальных случаях - возможно и работают. Но ваши случаи не есть нечто репрезентативное. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 17:37 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
alex55555полудухalex55555, а где что вылазит? boost::asio, boost::fiber, boost::coroutine2 - работают же В ваших тривиальных случаях - возможно и работают. Но ваши случаи не есть нечто репрезентативное. а вы знаете мои случаи? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 19:43 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудуха вы знаете мои случаи? Я прекрасно их представляю по вашим заявлениям. Знал бы человек что-то сложное - ему бы не представило труда опровергнуть мои заявления весьма короткими текстами с указанием на примеры сложности. Но в вашем случае за всю тему не было ни одного подобного ответа на любой заданный вам вопрос. То есть вы ничего не знаете о сложности. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 13:42 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
alex55555полудуха вы знаете мои случаи? Я прекрасно их представляю по вашим заявлениям. Знал бы человек что-то сложное - ему бы не представило труда опровергнуть мои заявления весьма короткими текстами с указанием на примеры сложности. а о каких ваших "заявлениях" речь? Я вижу 2 поста ДО моего вопроса, в одном из которых вы заявили про сложность, про которую я и спросил. Из вышепроцитированного потока сознания вытекает, что надо было не спрашивать, а самому ответить про сложности с примерами авторНо в вашем случае за всю тему не было ни одного подобного ответа на любой заданный вам вопрос. То есть вы ничего не знаете о сложности. тут по всей теме мои ответы и на первых 2х страницах куча текста + видео там есть любые ответы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 18:25 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухтам есть любые ответы. Вы правы, там же есть ответы и о ваших познаниях. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 15:17 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
вы сначала со своими познаниями разберитесь я то никогда и не претендовал на гуру асинхронной многопоточности вам задали вполне конкретный вопрос, а вы тут балабольню развели авторalex55555, а где что вылазит? вопрос на это заявление: alex55555В целом уже было озвучено мнение - руки нужно от искривления лечить некоторым пейсателям, а не решать проблему заменой языка. Сложность никуда не девается. В этом проблема. Она прячется новомодным язычком под ковёр, но тут же вылазит в другом месте . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 23:08 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
На правах топик-стартера я прошу модератора удалить темы обсуждения нейронных сетей которые я считаю полезными в целом но бесполезными в данном конкретном топике. Кто хочет ИИ и НС - может поднять свой топик. Модератор: Почистил. Просьба тему ИИ больше не упоминать в этом топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2018, 22:19 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
[spoiler] ещё одно must seeне забываем юзать субтитры ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 01:46 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Уважаемый mayton, mayton9) Некоторые архитектурные ошибки строителей РСУБД которые привели к утилизации процессорных ресурсов на бесполезной синхронизации там где этого можно было избежать вообще (статья Майкла Стоунбрейкера).Ссылку на статью укажите пожалуста. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2019, 15:08 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mirudomУважаемый mayton, mayton9) Некоторые архитектурные ошибки строителей РСУБД которые привели к утилизации процессорных ресурсов на бесполезной синхронизации там где этого можно было избежать вообще (статья Майкла Стоунбрейкера).Ссылку на статью укажите пожалуста. Я сейчас точно не могу найти цитату. Но вот кажется эта статья. http://citforum.ck.ua/database/articles/end_of_arch_era/ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2019, 15:16 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonПривет друзья. В настоящее время КМК идет переосмысление технологий разработки мультипоточных приложений. Некоторые поинты: 1) Отказ от программирования потока Thread как от единицы параллелизма в бизнес приложениях. Предполагается что event-driven более эффектичен чем масоовые "сидения" потоков в "мониторах". 2) Использование асинхронного вызова (async-call, callable, future, promise) в тех случаях когда это возможно. 3) Пересмотр архитектуры Thread с использованием Fiber (пример project Loom). Кооперативность снова в деле. Continuations (под другим названием). 4) Использование актора (обычно в совокупности с очередями и легковесными потоками). (Akka). Неблокирующие операции. Дешевизна ресурсов. Один нативный поток ОС обслуживает сотни акторов. 5) Использование корутины (coroutines). Использование уступчивого return (yield) (C#,Python) для организации сложных итераторов и генераторов. 6) Функциональный подход в части декомпозиции циклов (for-while) в рекурсии (Erlang) где это (теоретически) даёт возможность гибкого управления кооперативной мультипоточности. 7) Последние экономические тренды в области строительства ЦОД. Отказ от покупки крупных серверов и предпочтение облаков. Микросервисы. 8) Специальные языки где асинхронный I/O выдвинут как feature (Node.JS). Языки - где корутина - фича. Go(goroutine). 9) Некоторые архитектурные ошибки строителей РСУБД которые привели к утилизации процессорных ресурсов на бесполезной синхронизации там где этого можно было избежать вообще (статья Майкла Стоунбрейкера). Пруфы приводить не буду. Топик - просто является неким облаком тегов или смыслов которые я предлагаю обсудить. Если я где-то ошибся - и классифицировал понятия не так - прошу прощения. Я также мог ошибится в связи ЯП и фич. Sorry. Но надеюсь общий смысл будет ясен. P.S. Убежден что поток как единица разработки совершенно необходим в вычислительных задачах с HighLoad-CPU нагрузкой. Особенно где длительное время нет взаимодействия с внешним миром. Есть только взаимодействие АЛУ и memory канала. Но такие задачи достаточно специфичны и в бизнес-приложениях их не много. Какова будет мультипоточность в будущем? Прошу ваши каменты. Должно быть упрощение разработки. Должно быть. Уважаемый mayton, надо рассматривать три взаимосвязанные вещи, но которые имеют четкие границы: 1. доменную модель и возможность ( необходимость ) ее распараллеливания. И синхронизацию данных. 2. инструмент для работы: язык, фрамеворк. Позволяет ли. Заложено ли. 3. персонал, который имеет скилсы для решения и использования первых двух. mayton9) Некоторые архитектурные ошибки строителей РСУБД которые привели к утилизации процессорных ресурсов на бесполезной синхронизации там где этого можно было избежать вообще (статья Майкла Стоунбрейкера).последний пункт, надо внимательно осилить оригинал статьи без перевода. Могут быть варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 22:12 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mirudomнадо рассматривать три взаимосвязанные вещи, но которые имеют четкие границы: 1. доменную модель и возможность ( необходимость ) ее распараллеливания. И синхронизацию данных. 2. инструмент для работы: язык, фрамеворк. Позволяет ли. Заложено ли. 3. персонал, который имеет скилсы для решения и использования первых двух. С необходимостью распараллеливания вы опоздали на пол-века. Она (необходимость) уже есть. Фреймворк? При чем здесь он? Я топик поднимал о базовых примитивах синхронизации которые стоят на уровень ниже фрейворка. При чем здесь персонал? Мы здесь не обсуждаем вопросы рекрутинга или обучения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 00:10 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonКакова будет мультипоточность в будущем? Прошу ваши каменты. Ваш вопрос, что - уже устарел, ну когда Вы его задавали ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 10:42 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Вы невнимательно читаете первый пост. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 11:09 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonВы невнимательно читаете первый пост.Уважаемый mayton, что из Вашего первого поста я понял не правильно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 13:08 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Круг замкнулся. Давайте вернёмся в начало. Я писал прогнозы. Прогнозы на то как будет выглядеть многопоточность. Вы квотировали все мои пункты и дали весьма отвлеченные комментарии которые я не могу привязать к моим. Грубо говоря мы с вами говорим на очень разные темы. Давайте вы конкретизируете ваши вопросы в привязке к моим пунктам. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 13:21 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mayton Давайте вы конкретизируете ваши вопросы в привязке к моим пунктамУважаемый mayton, нет у меня вопросов, было интересно в оригинале осилить статью заслуженного чела на указанную тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2019, 21:40 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Nice job. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2019, 01:06 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mirudomбыло интересно в оригинале осилить статью заслуженного чела на указанную тему. Интересно было прочитать, много поучительного, но, эээ такое чувство, что дискуссия ведется об использовании различных столовых приборов, ну, достоинство вилок или ножей в различной ситуации, супчик - так лучше ложечкой, и тд, а вот вывод, вывод делается очень интересный, надо есть руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2019, 22:13 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonmaytonпропущено... Был топик географии 17384728 , где мне понадобилось реализовать Кривую Гилберта. Она реализована как утилита но мне нужен был некий строительный шаблон набодобие Iterator<Point> который по запросу next() выдает следующую координату кривой. Классический алгоритм кривой - рекурсивен. Рекурсия внутри итератора - тот еще головняк. Разваливать его в FSM со стеком мне не хотелось. Нудно да и ошибок можно наделать кучу. А реализация - вот она. Почти работает. После этого у меня появился еще один мотиватор чтобы реализовать красивый строительный элемент. Друзья. Топик - сложный и многогранный. Я форкну отдельное обсуждение по корутинам (сопрограммам). Я возьму штук 3-5 ЯП и промоделирую итератор Гильберта. Особо меня интересует перформанс и как оно реализовано с практической точки зрения. Прошу прощения что я беру такую специфичную задачу но у меня в наличии пока ничего другого нет. Если у вас есть предложения - рад послушать. Прошу прощения за внезапный UP. Итератор Гилберта на двух потоках. Кривая и громозкая реализация. Ее надо упростить. Опять-же разворачивание рекурсии в стек - не особо интересно. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135.
Меня интересуют языки с yield, ленивым конструированием списков. Тоесть нужно не алгоритмическое а имено технологическое решение. Предполагаю что будет масса рекурсивных алгоритмов которые обходят деревья графы и прочие достаточно сложные для разворачивания структуры. Под катом - каменты к алгоритму На 90% это копия того кода на сях который мы делали в пятничной географии. Только там интеракция этого сорца с другими модулями шла через STDOUT, тоесть проблемы передачи потока координат не было. Тоесть эти функции a(), b(), c()... каноничны и собственно рисуют и вращают кривую на разных уровнях раррешающей способности поверхности. Их изучать и анализировать не надо. А что надо? Нужно выкинуть нахер блокирующую очередь и вспомогательный поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 00:02 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonМеня интересуют языки с yield, ленивым конструированием списков. Конечный автомат же. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 01:09 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Давай сюда свой конечный автомат. Или не-конечный? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 01:21 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mayton, Я к тому, что yield разворачивается в конечный автомат (потому что ленивый), который довольно громоздкий. Хотя выглядеть это может и красиво ) Чёт я не увидел тут два потока... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 02:28 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
значит я хорошо их спрятал. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 08:09 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
На Kotlin можно попробовать переписать. Тогда явный Thread и очередь можно будет выкинуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 12:36 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mayton значит я хорошо их спрятал. я про потоки с вычислением, он у вас один. и зачем эти пляски с блокирующей коллекцией? может громоздкость связана с неясно оформленой/понятой задачей? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 13:23 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
hVosttmayton значит я хорошо их спрятал. я про потоки с вычислением, он у вас один. и зачем эти пляски с блокирующей коллекцией? может громоздкость связана с неясно оформленой/понятой задачей? ) Да нет никакой задачи. Это всё - мысли по теме будущей мультипоточности. Вы сами можете задачу поставить? Чтоб всем была понятна мотивация. Я одну задачу поставил. Итератор по сложной структуре данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 14:15 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mayton, ну вот yield-оператор ленивый, он будет возвращать данные по мере обращения. т.е. вычисления "вперёд", как вы сделали с коллекцией не будет, а если вам это нужно, то в любом случае мы придём либо к safe-блокирующей коллекции, либо к стеку с соответствующими ограничениями. в C#, например, можно посмотреть в сторону DataFlow или Channels ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 16:31 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonНа Kotlin можно попробовать переписать. Тогда явный Thread и очередь можно будет выкинуть. не вижу корреляции. если у вас вычисление работает в независимом потоке и не связано с чтением, то в любом случае будут: поток, коллекция, синхронизация потоков. возможны более оптимальные конструкции типа Producer/Consumer, но от этого в любом случае никуда не деться. какого волшебства там от котлина ожидается я не понял :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 16:33 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
насколько я понял, там паттерн = много-много мелких задачек а такие паттерны лучше всего паралеллить через GPU maytonЭто всё - мысли по теме будущей мультипоточности будущее многопоточности в полном, 100-процентном разделении потоков чтобы один поток никак не пересекался с другим (ни в кэше, ни в памяти, ни где-то ещё) А чтобы задача не проставивала, потоков должно быть больше, чем нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 18:05 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухбудущее многопоточности в полном, 100-процентном разделении потоков чтобы один поток никак не пересекался с другим (ни в кэше, ни в памяти, ни где-то ещё) Это невозможно. Ну или по крайней мере подобная задача была-бы бесполезна и ненужна для бизнеса. Задачи постоянно пересекаются по данным. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 20:51 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
там тоже самое всё, просто потоки не бегают туда-сюда по разным задачам взял задачу - решаешь её а ещё лучше, если каждый поток умеет делать только 1 тип задач один из БД читает, другой в БД пишет, третий регекспит, четвёртый считает итд как в клетке ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 21:10 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудух, ты моделируешь некий рай или Эдем для мультипоточности. И ему есть название. Shared nothing. Это когда например ты задачи можешь разнести по разным хостам и запустить их и тупо ждать результата. Интеракции между ними нет и не предвидится. Так например работает блокчейн цепочка. У них интеракция - только цифровое подписывание текущего блока валютных транзакций. Это и позволяет гонять крипту на физически разных компах и ядрах и видеокартах и аппаратных устройствах типа ASIC. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 21:16 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
hVosttmaytonНа Kotlin можно попробовать переписать. Тогда явный Thread и очередь можно будет выкинуть. не вижу корреляции. если у вас вычисление работает в независимом потоке и не связано с чтением, то в любом случае будут: поток, коллекция, синхронизация потоков. возможны более оптимальные конструкции типа Producer/Consumer, но от этого в любом случае никуда не деться. какого волшебства там от котлина ожидается я не понял :) Ленивый итератор на Scala я планирую переписать по аналогии с тем как я например генерил кандидатов для простых чисел. Решение очень изящное. И никаких тебе блокинг очередей. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Но с Гилбертом так пока не вышло. Я что-то упускаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 21:29 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonНо с Гилбертом так пока не вышло. Я что-то упускаю. Вроде постил уже Четверговый корутин с Гилбертом ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 21:57 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
fixxermaytonНо с Гилбертом так пока не вышло. Я что-то упускаю. Вроде постил уже Четверговый корутин с Гилбертом О. Шикарно. Почему я забыл. ХЗ. Я только с вашего позволения заменю tuples, на case-class, так удобнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 22:04 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
А в чем разница между этими двумя операторами? Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 22:15 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonА в чем разница между этими двумя операторами? Код: java 1. 2. 3. 4.
Первый цепляет элемент, второй два стрима между собой. Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2019, 22:33 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonполудух, ты моделируешь некий рай или Эдем для мультипоточности. И ему есть название. Shared nothing. Это когда например ты задачи можешь разнести по разным хостам и запустить их и тупо ждать результата. Интеракции между ними нет и не предвидится. Так например работает блокчейн цепочка. У них интеракция - только цифровое подписывание текущего блока валютных транзакций. Это и позволяет гонять крипту на физически разных компах и ядрах и видеокартах и аппаратных устройствах типа ASIC. да не, я вроде не это описал разные хосты всё также будут мутить свою внутреннюю многопоточность я скорее описывал другую архитектуру процессора ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 00:20 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Придумай задачу под твой процессор. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 00:49 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
fixxermaytonА в чем разница между этими двумя операторами? Код: java 1. 2. 3. 4.
Первый цепляет элемент, второй два стрима между собой. Код: plaintext 1. 2. 3. 4. 5.
Вот как-то так получилось. Итератор работает и тест прошел. Только не нравятся мне вот эти две переменных. Они как-то не по феньшую в этой скале стоят. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90.
(вот этот целочисленный верхний логарифм не надо разбирать. Он утилитарный и я его выкину из итератора в другой библиотечный код. Я привел его просто для наглядности). Странно. Но почему я обошёлся без :: Nil хвостика? По идее его-бы надо добавить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 01:03 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
MoveTo - вообще рудимент. Выкину его. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 01:10 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Linerel - тоже рудимент вобщем-то. Их назначение было понятно когда они рисовали точки и линии в VGA-режиме какой-то старой DOS-освкой среды типа Borland Pascal. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 11:25 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonПридумай задачу под твой процессор. любая ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 15:47 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухmaytonПридумай задачу под твой процессор. любая Нет ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 15:48 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Хм... если задать в качестве upper bound обобщенного типа любой тип наследник AnyVal то каким образом инициплизировать числовой тип нулем и единицей? Код: java 1. 2. 3. 4. 5. 6.
Код: java 1. 2. 3. 4. 5. 6.
Среди числовых типов там нет какого-то другого базового. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 00:03 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
mayton, Что-то ты мой пример перепел как Рабинович Карузо. Навтыкал мутабельности какой-то ненужной. В примере все есть, только рассмотри внимательно. Туплы, это не координаты, а дельты координат. Так понятнее? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2019, 02:18 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonполудухпропущено... любая Нет демон считает всякую всячину быстро, без задержек, но периодически прилетают задачи, где результаты надо записать на диск так то ему треды не нужны, но вот I/O диска намекает, что лучше эту задачу скинуть кому-то другому и, не дожидаясь ответа , идти считать дальше отдельный поток пошёл шуршать записью на диск, при этом никак не пересекаясь с основным. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 06:38 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудухдемон считает всякую всячину быстро, без задержек, но периодически прилетают задачи, где результаты надо записать на дискПроцессор-то тут при чём? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 07:00 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
fixxer, да вот такие мы Рабиновичи. Thanks. Я еще этот-же пример попробую на GoLang. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 09:52 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Basil A. Sidorovполудухдемон считает всякую всячину быстро, без задержек, но периодически прилетают задачи, где результаты надо записать на дискПроцессор-то тут при чём? задачу кому-то же надо проконтролировать ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 15:27 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
в ++20 появятся std::coroutine + std::lazy на замену std::future, который ресурсы выжирает и роняет эффективность ещё планируют добавить co_executor + примитивов для контроля над ресурсами ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 09:51 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
...в каком-то там неопределённом будущем... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 09:52 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
В будущем можно будет на С++ нарисовать кривую Гилберта? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 10:08 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
а в чём сложность? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 13:38 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Сложности нет. А как вы будете делать итератор? На фьючерсах? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 13:41 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
у тебя первая тема с гилбертом аж 2015 года за 4 года вопрос не закрыл, а сложности нет? насколько я понял задачу, там число операций удваивается с каждой итерацией (за операцию берётся создание нового угла, или как он там называется) ну так это мелкие же расчёты, которых много это задача для GPU, как я уже писал а вопрос реализации вторичен, пусть корутины с нитками тащат ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 15:07 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonМеня интересуют языки с yield, ленивым конструированием списков. co_yield в корутинах есть а std::lazy в ++20 появится (хоть это и просто созвучно ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 15:10 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
полудух, при чем здесь GPU вообще? Меня интересовали просты практичные вопросы использования. Видел сорц на Java? А потом на Scala. Один и тот-же итератор который обходит древовидные структуры. Какова цена решения с точки зрения разработки. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 15:23 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
maytonпри чем здесь GPU вообще? сначала спрашиваешь про многопоточность, а потом причём тут многопоточость в теме про многопоточность... maytonМеня интересовали просты практичные вопросы использования. https://ru.wikipedia.org/wiki/Алгоритм_Гилберта_—_Джонсона_—_Кирти#Использование ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 21:56 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Ладно проехали. Вообще не в ту степь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2019, 23:00 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Будет время, накидаю на F#, если кто-то не сделал этого раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 00:15 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Welcome. Я буду коллекционировать. + Я еще на Go напишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 10:10 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2019, 09:40 |
|
Тяпничная будущая мультипоточность
|
|||
---|---|---|---|
#18+
Up. Небольшой апдейт по проекту Loom. http://cr.openjdk.java.net/~rpressler/loom/loom/sol1_part1.html Еще не читал. Буду читать вместе с вами. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2020, 22:35 |
|
|
start [/forum/topic.php?all=1&fid=16&tid=1339751]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
173ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
169ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 401ms |
0 / 0 |