Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LINUX.ORG.RU
- добро пожаловать, www_linux_org_ru
- Новости
- Галерея
- Форум
- Трекер
- Уведомления (5)
- Поиск
- Форум — Development
- Потоки в Julia: зелёные или нормальные?
- greenshit, julia, pthreads, threads
- 2
- 5
- Собственно, весь вопрос в заголовке: из официальной документации непонятно, являются ли экспериментально реализованные потоки в языке julia настоящими или же это очередная кооперативная фикция, зелёная и в пупырышках. Просто если последнее, то я даже смотреть в сторону этой фигни не стану (в Julia отлично реализовано взаимодействие форкнутых процессов), если же процессы основаны на pthreads или чём-то подобном, то это круто и весьма интересно.
- DRVTiny ★★★★★
- 29.06.2017 15:04:57
- Ответить на это сообщение Ссылка
- ← Гарантированно асинхронная запись в Linux?
- Срочно требуется Мейнтейнер deb-based дистрибутива Linux (за хорошую оплату). →
- настоящими или же это очередная кооперативная фикция, зелёная и в пупырышках.
- Что плохого в green threads?
- hateyoufeel ★★★★ (29.06.2017 16:44:31)
- Ответить на это сообщение Ссылка
- блин, а наплодить 100500 потоков и тупо в top посмотреть не? Где дух исследователя, вашу мать?
- anonymous (29.06.2017 16:53:22)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от hateyoufeel 29.06.2017 16:44:31
- Если N (>1) физических потоков обсуживают M логических, то всё хорошо. Если N всегда равно 1, тогда проблемы со скалируемостью.
- anonymous (29.06.2017 17:00:00)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от anonymous 29.06.2017 17:00:00
- Ну так это не зелёные потоки виноваты, а отсутствие поддержки SMP.
- hateyoufeel ★★★★ (29.06.2017 17:00:52)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от hateyoufeel 29.06.2017 16:44:31
- Green threads - говно, потому что не используют многоядерную архитектуру процессора в 10-е годы 21-го века.
- Ещё вопросы?
- DRVTiny ★★★★★ (29.06.2017 17:05:45)
- Последнее исправление: DRVTiny 29.06.2017 17:06:38 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:05:45
- Green threads - говно, потому что не используют многоядерную архитектуру процессора в 10-е годы 21-го века.
- Green threads и SMP — довольно ортогональные понятия. Некоторые языки/платформы умеют и то и другое одновременно (Haskell, JVM, Erlang, C++ с Boost Fibers), другие — что-то одно (Python, Ruby).
- hateyoufeel ★★★★ (29.06.2017 17:09:32)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от anonymous 29.06.2017 17:00:00
- Главная проблема одна - это не параллелизм. Да, всё равно при обращении к памяти или при любом конкурентном IO придётся выстраиваться в цепочку, параллелизм не бывает абсолютным. Но запуск приложения с кучей в действительности последовательно выполняемых «кагбе потоков» - это всегда путь к проблемам «упс, меня застряло» - в форточках это выглядело как курсор-«часики», которые крутились и крутились, и даже не думали «отвисать», а помогал в таких случаях чаще всего Ctrl+Alt+Delete.
- DRVTiny ★★★★★ (29.06.2017 17:15:37)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:15:37
- то всегда путь к проблемам «упс, меня застряло»
- Каким образом обычные треды спасают от дедлоков?
- RazrFalcon ★★ (29.06.2017 17:22:00)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:15:37
- Да, всё равно при обращении к памяти или при любом конкурентном IO придётся выстраиваться в цепочку, параллелизм не бывает абсолютным.
- Для тебя, наверное, это окажется сюрпризом, но треды ОС от этого тоже страдают.
- hateyoufeel ★★★★ (29.06.2017 17:22:49)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:15:37
- Почему зеленые потоки не могут исполняться параллельно на разных ядрах? Ты уверен?
- dave ★★★★★ (29.06.2017 17:45:43)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от dave 29.06.2017 17:45:43
- Потому что им нужны общие данные, поскольку вообще 99% смысла потоков - в том, чтобы легко шарить данные.
- Как предполагается шарить данные между этими псевдопотоками, если они работают в рамках разных задач (процессов, если хотите)? Абсолютное большинство современных языков настолько абстрактны и настолько «платформонезависимы», что про shared memory они «не знаю - не слышали», остаются всякие каналы, которые практически везде есть. Но через каналы данные копируются, а не шарятся, вот в чём беда-то ;)
- DRVTiny ★★★★★ (29.06.2017 17:53:27)
- Последнее исправление: DRVTiny 29.06.2017 17:53:54 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от hateyoufeel 29.06.2017 17:22:49
- Если почитаете внимательно - я о настоящих тредах и говорил: а именно о том, что даже потоки, исполняющиеся на разных ядрах процессора, только при очень грамотно продуманной архитектуре не будут мешаться друг у друга под ногами, постоянно синхронизируясь явным и неявным образом. Но «кооперативные потоки» создают куда более дерьмовую проблему: если один из них наглухо виснет - остальные просто не выполняются. Например, подход python в духе «20 инструкций этого потока, потом 20 - другого» - хорош тольк тогда, когда 20 инструкций одного потока выполняются примерно столько же, сколько и 20 другого, а ещё есть данная Высшими Силами абсолютная гарантия того, что одна из 20-ти инструкций не приведёт к подвисанию потока на пару минуточек.
- DRVTiny ★★★★★ (29.06.2017 17:58:39)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:58:39
- Но «кооперативные потоки» создают куда более дерьмовую проблему: если один из них наглухо виснет - остальные просто не выполняются.
- Это верно только в довольно убогих реализация типа того же питона.
- hateyoufeel ★★★★ (29.06.2017 18:03:27)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от RazrFalcon 29.06.2017 17:22:00
- Каким образом обычные треды спасают от дедлоков?
- Тут разве про дедлок. Как я понимаю зеленый поток это как кооперативная многозадачность, т.е. в зеленом потоке нужно явно вызывать на исполнение другой поток, не? Т.е. некий wait и так должно быть во всех используемых I/O библиотеках иначе никакого конкаренси работать не будет.
- Aber (29.06.2017 18:05:26)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от Aber 29.06.2017 18:05:26
- в зеленом потоке нужно явно вызывать на исполнение другой поток, не?
- Только в C/C++.
- hateyoufeel ★★★★ (29.06.2017 18:06:10)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от hateyoufeel 29.06.2017 17:09:32
- Green threads и SMP — довольно ортогональные понятия. Некоторые языки/платформы умеют и то и другое одновременно ... JVM ...
- Помню читал, что java 1.0 умела только green threads, я думал что нативные потоки заменили их совсем. Но green threads как идея в принципе вернулись в виде неблокирующего I/O.
- Aber (29.06.2017 18:20:20)
- Ответить на это сообщение Ссылка
- а почему у анонiмуса теперь 5 звезд и пишет он почти по человечески?
- qnikst ★★★★★ (29.06.2017 18:26:16)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:05:45
- Да, есть вопрос, почему ты выдаешь ложь за правду?
- Green threads поддерживают N:M mapping в нормальных языках.
- qnikst ★★★★★ (29.06.2017 18:27:31)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:15:37
- posix треды не решают ни одну из этих проблем. То, что ты пишешь про форточки абсолютно иррелевантно к green тредам.
- Может тебе статей накидать, может хоть полезное что почитаешь?
- qnikst ★★★★★ (29.06.2017 18:28:58)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 18:28:58
- поговорил с анонiмусом..
- qnikst ★★★★★ (29.06.2017 18:30:11)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от Aber 29.06.2017 18:05:26
- Я хз, что ТС подразумевает под «застряло».
- Я ноль в гринтредах, но наезжать на них только из-за того, что они не такие как в сишке, как минимум странно.
- RazrFalcon ★★ (29.06.2017 18:42:38)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от RazrFalcon 29.06.2017 18:42:38
- Гринтред - это просто очередное «красивое» абстрактное слово. Реализованы везде по-разному, а вся суть сводится к тому же, что делает Coro в Perl (кстати, там это не догадались назвать «зелёными потоками») : N процедур выполняются поочерёдно: немного кода одной процедуры, потом немного когда другой, потом немного третьей. Где-то выполнение прерывается не извне, а прямо в коде процедуры явным образом передаётся управление следующей.
- Нужны гринтреды для того, чтобы абстрагироваться от бренного мира, а на самом деле для того, чтобы проще было писать компиляторы и не заморачиваться нативными тредами на разных платформах. Разработчики успешно сами себе находят оправдания - LLVM им нужен, чтобы под разные платформы не писать компиляторы (раньше компилировали в Сишный код, теперь стал модным LLVM), гринтреды - чтобы не заморачиваться с системным программированием под целевые платформы.
- А в конечном итоге всё это нужно для того, чтобы больше людей могли создавать больше языков программирования. Огромный профит же от изобилия языков, каждый из которых в равной мере не умеет использовать возможности процессоров. Процессоры уже 10-ть лет развиваются по пути горизонтального масштабирования, наращивая количество ядер каждый год, а языки программирования переизобрели кооперативную многозадачность, которая, казалось бы, протухла ещё в начале 90-х годов.
- DRVTiny ★★★★★ (29.06.2017 19:07:27)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 18:27:31
- Чувак, мне жаль, но ты пропустил все лекции по операционным системам и сразу, ничего не читая, принялся писать. Сходи подучись сначала, а потом приходи с новыми полезными знаниями.
- И да, прекрати уже писать так, словно ты тупая блондинка в аське, несолидно.
- DRVTiny ★★★★★ (29.06.2017 19:09:55)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от Aber 29.06.2017 18:20:20
- Всё верно, только насколько я знаю - «зелёные потоки» как раз наоборот родились из идеи асинхронного (в общем случае - событийного) программирования. Зелёные потоки - вырожденный случай, когда событие - внутреннее и формулируется примерно как «ой, надо бы переключиться на следующий кагбепоток». Триггером события выступают довольно странные вещи типа «эта процедура выполнила свои 20 инструкций - надо переключаться» или «эта процедура выполнила yield, какое счастье, уже таки можно переключаться».
- DRVTiny ★★★★★ (29.06.2017 19:14:40)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от hateyoufeel 29.06.2017 18:03:27
- В любом случае, даже если эти «кагбе потоки» реализованы где-то лучше, чем в Питоне, в абсолютном большинстве случаев, за исключением разве что Golang'а, их «призвание» - это сделать потоки платформонезависимыми и вообще ни от чего независимыми, а по сути и не потоками вовсе.
- DRVTiny ★★★★★ (29.06.2017 19:18:18)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 19:09:55
- Вообще-то не я.
- qnikst ★★★★★ (29.06.2017 19:35:50)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 19:14:40
- вообще-то поток проработал свою порцию времени и находится в safepoint или поток остановился на получении результата асинхронного IO, ну прям как в OS тредах, только контекст свич отличается на пару порядков.
- qnikst ★★★★★ (29.06.2017 19:40:52)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 19:40:52
- вот например, как это сделано в ghc RTS http://simonmar.github.io/bib/papers/conc-substrate.pdf
- и далее по ссылкам.
- qnikst ★★★★★ (29.06.2017 19:43:15)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 19:40:52
- интересно, а как из документации на https://docs.julialang.org/en/stable/manual/parallel-computing/ можно не получить ответ на вопрос /0, там черным по белому что количество воркеров задаётся опциями ком строки и фиксировано и как происходит шедулинг.
- или тред не для ответа на этот вопрос был, а про лёгкие потоки пообщаться?
- qnikst ★★★★★ (29.06.2017 20:01:13)
- Последнее исправление: qnikst 29.06.2017 20:03:04 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 19:18:18
- в абсолютном большинстве случаев, за исключением разве что Golang'а, их «призвание» - это сделать потоки платформонезависимыми и вообще ни от чего независимыми, а по сути и не потоками вовсе.
- Мальчик, ты баклажан. В большинстве случаев green threads сделаны ради упрощения кода, чтобы можно было не писать асинхронную лапшу а-ля node.js или поллинг как в C, а обычных дубовый синхронный код и вместе с тем обрабатывать большое количество событий. В сочетании с развитым IO-менеджером green threads ведут к крайне низким накладным расходам в обмен на сильное упрощение кода. Ты можешь писать такой же код на обычных тредах, но у них накладные расходы на переключение контекста намного выше, поэтому так мало кто делает.
- hateyoufeel ★★★★ (29.06.2017 20:22:43)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 20:01:13
- Лично я там нашел только упоминание количества ядер процессора, что не говорит ни о чём по сути. Если бы там хоть слово было о том, как именно реализовано, какой либой - я бы не задал этот вопрос.
- Насчёт контекст свитчей - когда они делаются в рамках одного процесса, вся эта карусельная внутренняя кухня гринтредов начинает работать только после того как процесс получит свой квант времени. Этот шедуллинг процесса внутри шедуллинга ядра - это какой-то противоесиественный путь самоограничения, слово бы из скромности: не использовать больше квантов времени, стесняться занять дополнительные ядра cpu. Зачем?
- DRVTiny ★★★★★ (29.06.2017 20:23:50)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:53:27
- Да вопрос был скорее риторический. Просто хочу сказать, что при правильной реализации зеленые потоки не имеют тех недостатков, что ты им приписываешь (питон к этому списку не относится). Они вполне работают параллельно сразу на нескольких ядрах процессоров. Это уже реальность.
- Так скорее проблема, как правильно не вызвать ненароком блокирующий метод. В Haskell она решается, и для этого было сделано очень много. Используются неблокирующие операции IO по возможности.
- У зеленых потоков есть, конечно, слабые места, но они немного другие, как я себе представляю
- dave ★★★★★ (29.06.2017 20:24:03)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 19:07:27
- Разработчики успешно сами себе находят оправдания - LLVM им нужен, чтобы под разные платформы не писать компиляторы
- Удивительно было бы если бы все рвались писать свои кодогенераторы под все платформы.
- раньше компилировали в Сишный код, теперь стал модным LLVM
- LLVM налагает гораздо меньше ограничений на модель выполнения кода и позволяет писать свои плагины с оптимизациями и прочими ништяками. Как минимум этим он выигрывает у C в качестве бэкенда для компиляции.
- гринтреды - чтобы не заморачиваться с системным программированием под целевые платформы.
- Особенно если учесть, что из целевых платформ сейчас большинством поддерживаются только pthreads (и то не весь зоопарк реализаций) и венда. Отличная гипотеза! Браво!
- hateyoufeel ★★★★ (29.06.2017 20:27:04)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от dave 29.06.2017 20:24:03
- Если «зелёные потоки» выполняются на разных ядрах процессоров - значит, они не «зелёные», потому кто кроме ядра ОС назначить потоку выполнения ядро не может никто, а ОС про что-то там «зелёное» ничего близко не знает, для неё это просто процесс, не более того. Другое дело, что сам процесс может создать реальные потоки внутри себя и уже их поделить на «зелёные» - тогда да, эти «кагбепотоки» могут работать на разных ядрах, поскольку нормальные нативные потоки работают на разных ядрах.
- Против такой реализации ничего не имею, но языки, которые вообще не осиливают pthreads, и при этом в документации рассказывают что-то про поддержку потоков - меня слегка бесят. Именно по той самой причине, о которой я сказал в самом начале: это не параллелизм, это какая-то имитация бурной деятельности.
- DRVTiny ★★★★★ (29.06.2017 20:40:56)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 20:23:50
- В вопросе есть ложная дихотомия, нормально реализованные грин треды занимают все ядра, у них n рабочих OS процессов, и их количество советуют делать по количеству ядер (как в Джулии). В общем это на 80% даёт ответ, но если читать далее, то в разделе про шедулинг написано, что таски это корутины, и дальше дано пояснение, цитирую: Tasks (aka Coroutines)
- Tasks are a control flow feature that allows computations to be suspended and resumed in a flexible manner. This feature is sometimes called by other names, such as symmetric coroutines, lightweight threads, cooperative multitasking, or one-shot continuations
- вроде тут однозначно.
- я попытаюсь написать более взвешенный и длинный коммент про гринтреды еще
- qnikst ★★★★★ (29.06.2017 20:48:11)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от hateyoufeel 29.06.2017 20:27:04
- Особенно если учесть, что из целевых платформ сейчас большинством поддерживаются только pthreads (и то не весь зоопарк реализаций) и венда.
- Cocoa NSThread? Не слышали?
- Ну и да, почему-то весьма немало софтверных компаний пытается клепать мультиплатформенное ПО там, где это в эпоху тотальной виртуализации уже даром не нужно.
- У разработчиков же, в том числе и у разработчиков ЯП, вообще какая-то фобия разработки под определённую платформу: дескать, «если я буду хорошо понимать, как это работает в Linux, но плохо понимать - как работает в Windows, то стану менее востребованным на рынке. Лучше я буду оперировать абстрактными понятиями в полном вакууме - и буду одинаково класть болт на все платформы, под которыми работает мой софт, потому что так оно спокойнее»
- DRVTiny ★★★★★ (29.06.2017 20:48:34)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 20:40:56
- Грин треды не про parallelism, они про concurrency. Если кто-то ожидает, что в параллельных задачах generic реализация гринтреды даст ощутимые плюсы (за исключением случаев нерегулярного общения, извиняюсь за самоизобретенный термин, то он делает это зря)
- qnikst ★★★★★ (29.06.2017 20:50:19)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 20:50:19
- за исключением случаев нерегулярного общения
- в этом случае они эвквивалентны event loop
- annulen ★★★★★ (29.06.2017 20:51:55)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 20:48:11
- А насчёт затрат на переключение контекста - почему вдруг они выше с вашей точки зрения?
- Если без учёта блокировок IO (предположим, все потоки просто выполняют долгоиграющие вычисления) контекст переключался, условно, 1 раз в 20 мс, то он так и будет переключаться раз в 20 мс, что здесь можно сэкономить.
- Переключение контекста из 0-го кольца защиты в 3-е и обратно - не самая приятная задача конечно, но использование таймера как основного источника событий переключения не позволяет как-то гибко жонглировать количеством этих переключений в единицу времени.
- DRVTiny ★★★★★ (29.06.2017 20:54:33)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 20:48:34
- Cocoa NSThread? Не слышали?
- Но зачем, когда pthreads поддерживаются нативно?
- WebKit на макоси использует pthreads, если бы у NSThread были хоть какие-то преимущества то полюбому бы их использовали
- annulen ★★★★★ (29.06.2017 20:55:45)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 20:50:19
- Запилил крохотный пример с тредами на Julia - на первом же @printf оно вывалилось в Segfault. Вот теперь охотно верю в то, что потоки «честные», pthread'овые. Так бы они сразу и сказали в документации, а то всё больше намёками вокруг, да около.
- DRVTiny ★★★★★ (29.06.2017 20:58:30)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 20:58:30
- я не умею делать такие выводы.. честно не вижу связи в segfault и модели выполнения
- qnikst ★★★★★ (29.06.2017 21:01:12)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 20:50:19
- Раз ты тут оказался по случаю. Ты в курсе, что у вас reconnect не всегда работает? Хотя да, видел у вас issue. Собираетесь исправлять?)
- Кстати, могу подкатить тест на основе своего кода полностью по BSD3
- dave ★★★★★ (29.06.2017 21:01:37)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 20:48:11
- В вопросе есть ложная дихотомия, нормально реализованные грин треды занимают все ядра, у них n рабочих OS процессов
- Не понимаю. Совсем. Есть потоки исполнения, давайте говорить о них. Потоки исполнения в рамках одного процесса просто разделяют данные, таблицы страниц ОЗУ, у них один и тот же TSS.
- Так вот, для того, чтобы «зелёные потоки» заняли несколько ядер - они должны работать в разных настоящих потоках исполнения pthreads. А после этого они уже, на мой взгляд, перестают быть таким уж зелёными, разве нет?
- DRVTiny ★★★★★ (29.06.2017 21:04:27)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 21:01:12
- Связь прямая: нижележащий код вывода на экран не является thread-safe. В рамках простого переключения кусков кода в одном потоке исполнения (кагбетредов), как это делает тот же python, никаких проблем с printf'ом бы не было, будь он хоть сколько угодно не safe.
- DRVTiny ★★★★★ (29.06.2017 21:06:44)
- Последнее исправление: DRVTiny 29.06.2017 21:07:05 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 20:58:30
- pthreads не обязан создавать «честный» os thread (и не создаёт на некоторых os). Это бы только запутывало.
- anonymous (29.06.2017 21:11:19)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 21:04:27
- А как вы такие потоки называете? Синими?
- anonymous (29.06.2017 21:15:47)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от annulen 29.06.2017 20:51:55
- они и так человеческий вариант написания event loop.
- qnikst ★★★★★ (29.06.2017 21:18:05)
- Ответить на это сообщение Ссылка
- Отвечаю полность. Сразу извиняюсь, что писал про aнонiмуса, просто он любит делать вбросы в очень похожем стиле. Теперь к потокам:
- 1. Есть разные варианты маппинга грин тредов на реальные 1:1, N:1, N:M, все толковые языки реализуют N:M, причем OS треды могут быть разными в зависимости от нижележащей OS.
- 2. Да грин треды это не паралелизм, это concurrency, в том случае когда нужно сделать много разной работы при этом зачастую IO, а не CPU bound. В случае если просто параллелизм, то нету большого смысла делать больше рабочих процессов, чем ядер, все равно ось магию не совершит, а так хоть меньше переходов будет.
- 3. Соответсвенно в большинстве случаев грин треды это человеческое лицо к poll-интерфейсу, когда вместо лапши из колбеков/корутин пишется человеко-понятный код.
- 4. Несмотря на то, что green треды это про конкаренси, помочь параллелизму они тоже могут
- 5.
- Как предполагается шарить данные между этими псевдопотоками, если они работают в рамках разных задач (процессов, если хотите).
- green треды работают в рамках одного процесса, но могут выполняться в разных тредах, я не понимаю, в чем проблема с шареньем данных (если это не erlang).
- 6. да в грин тредах кооперативная многозадачность, но обычно задача переключения ложится на RTS. Делать можно по разному, например, в haskell передача управления происходит в safe points (аллокации), если истек таймер, или если тред «заблочился», на операции (для тредов многие операции выглядят блокируемыми), в связи с этим есть фишка в невозможности переключения процесса, который ничего не аллоцирует (с другой стороны компилятор сейчас умеет это решать).
- 7. Shared memory ортогонально потокам, и выполнению в разных тредах. Вопрос к библиотеке языка, все здоровые языки умеют (во всяком случае в библиотеках)
- 8.Грин треды не абстракция над OS тредами.
- 9. Когда ядро делает context switch, то ему нужно сделать много больше, сохранить/восстановить значения регистров, настроить страницы виртуальной памяти и т.п. По сравнению с программой, внутри которой переключение почти бесплатно. Так же каждый OS поток ест больше ресурсов системы, память записи в структуры данных и т.п. ~1000ns против 10?
- 10. С другой стороны RTS будет обязательно вносить свой оверхед и для задач, где надо тупо считать, а потом обменяться данными это может быть абсолютно бесполезно
- qnikst ★★★★★ (29.06.2017 21:21:46)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 21:01:12
- Кстати, https://docs.julialang.org/en/stable/manual/parallel-computing/
- - звучит на удивление разумно. Редко в документации к ЯП можно увидеть что-то подобное. Особенно про эксклюзивный доступ ядра процессора к «своей» области памяти здорово написано.
- DRVTiny ★★★★★ (29.06.2017 21:22:49)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 21:04:27
- Так вот, для того, чтобы «зелёные потоки» заняли несколько ядер - они должны работать в разных настоящих потоках исполнения pthreads. А после этого они уже, на мой взгляд, перестают быть таким уж зелёными, разве нет?
- Представь, у тебя задача 200 миллисекунд ждёт данных из сокета или файлового дескриптора, 100 миллисекунд обрабатывает полученное и ещё 200 миллисекунд его выводит в другой сокет или дескриптор. Сколько тебе ядер нужно серверу для непрерывной обработки пяти потоков данных?
- anonymous (29.06.2017 21:25:52)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 21:04:27
- Нет, не перестают. Давайте с другой стороны, может проще будет - есть green thread, у него есть свой мелкий стек, код, который выполняется id внутри программы и OS про него ничего не знает. Программист пишет код в этой абстракции.
- Все что ему гарантируется, что эти потоки будут «как-то» выполняться, при том, так что специфика выполнения не влияет на результат, в идеале ещё fairness guarantee - то что поток, когда-нибудь выполнится, + гарантия (с какими-то оговорками), что другие green треды не влияют на поведение данного.
- Все, тут вообще нету никаких других утверждений и то, как выполнять код является целиком и полностью делом системы выполнения.
- Существуют 3 большие стратегии выполнения:
- * 1:1 - один green тред маппим на 1 OS тред - это очень простая но ресурсоёмкая стратегия, дающая хорошие гарантии; но так обычно никто не делает * N:1 - N green тредов на 1 OS тред - то про что пишешь ты * N:M - N green тредов на M OS тредов, где N много больше M (обычно M = числу CPU). Это достаточно сложно пишется, там возникает много вопросов про то, как балансировать треды, как правильно делать foreign вызовы. Но все же многие языки делают эту модель.
- Независимо от выбора стратегии зеленые треды останутся зелеными.
- Например, ghc haskell, про который я тут люблю говорить умеет N:1 модель (non-threaded RTS) и N:M модель. Если я правильно кинул ссылку, то в статье что я кинул описываются детали релизации N:M модели, может быть интересно почитать на досуге.
- qnikst ★★★★★ (29.06.2017 21:30:34)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 21:06:44
- как-то неожиданно, мне лень ставить и копаться в джулии, в других языках с N:M стратегией выполнения легких потоков проблем нету, функции вывода на экран работают прекрасно и ни о чем думать не надо, даже если поток перекинут в другой тред.
- qnikst ★★★★★ (29.06.2017 21:34:43)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 21:21:46
- Замечания :)
- По 9-му пункту - вытесняющая многозадачность предполагает переключение контекста по таймеру. Таким образом, что мы сэкономим на гринтредах, если переключение просто N раз секаунду? Я когда собирал тогда ещё ядра Linux 2.4, а потом первые 2.6 - можно было прямо в конфигурилке задавать частоту переключений: для десктопов повыше, для серверов пониже.
- По 8-му - да, не абстракция, но существуют-то они внутри OS тредов, которые «вытесняемые потоки исполнения».
- По 6-му пункту - если гринтреды в разных реальных/вытесняемых потоках исполнения, то они вообще никак друг с другом не соприкасаются, их, получается, переключают разные «внутриязыковые» планировщики?
- Относительно N*M - я понял, что речь идёт именно о вытесняемых потоках исполнения N и M зелёных потоков. Просто исходно речь вроде шла об N процессах - и меня это конечно удивило (мне ли не знать, насколько геморно реализованы nix'овые IPC, например).
- DRVTiny ★★★★★ (29.06.2017 21:38:00)
- Последнее исправление: DRVTiny 29.06.2017 21:40:05 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 21:34:43
- Как-то неожиданно, мне лень ставить и копаться в джулии, в других языках с N:M стратегией выполнения легких потоков проблем нету,
- Исходно printf из Glibc, насколько я помню, не thread-safe, так что ничего удивительного нет...
- DRVTiny ★★★★★ (29.06.2017 21:39:43)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 21:39:43
- For an explanation of the terms used in this section, see attributes(7).
- ┌────────────────────────┬───────────────┬────────────────┐
- │Interface │ Attribute │ Value │
- ├────────────────────────┼───────────────┼────────────────┤
- │printf(), fprintf(), │ Thread safety │ MT-Safe locale │
- │sprintf(), snprintf(), │ │ │
- │vprintf(), vfprintf(), │ │ │
- │vsprintf(), vsnprintf() │ │ │
- └────────────────────────┴───────────────┴────────────────┘
- мой man говорит так, но я могу его неверно интерпретировать
- qnikst ★★★★★ (29.06.2017 21:42:30)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 21:38:00
- 9. Переключение дороже в 100 раз даже на модных процессорах, стек грин треда 2-16kb начальный, posix_thread 8Mb, но тюнится, так? Вообще когда хочется сказать что green треды это плохо, можно green треды заменить на epoll с не фиксированными callback-ами (я знаю что говорить callback тут не правильно, но вы ведь поняли). Т.к. если юзер может добавлять новые fd (и события для таймера, на которых ждать) и что выполнять, когда это произойдет. Вот это грин треды и есть.
- На самом деле RTS решает много связанных вопросов, о которых думать не надо.
- 8. Я не вижу проблем в шедулере внутри шедулера, более того я вижу смысл от самописанного шедулера, внутри языка с легкими потоками. Это может быть полезно когда нужно реализовывать разные стратегии планировки, которые зависят от задачи, например FIFO для IO bound и FILO для CPU bound тредов.
- 6. да их переключают/(синхронизуют если нужно для GC) внутриязыковые планировщики.
- Если я где-то сказал N процессов, то я сделал это зря. Если честно я нигде не видел того, чтобы раскидывали на процессы, и не представляю зачем это может быть нужно. Можно erlang к такому отнести и ему подобные решения, но это все равно не то.
- qnikst ★★★★★ (29.06.2017 21:50:40)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 21:50:40
- UPD. знаю, для языков со stop the world GC могут быть бонусы от разнесения по разным процессам.
- qnikst ★★★★★ (29.06.2017 21:53:07)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 21:42:30
- Нет, всё верно, значит всё-таки Thread-safe. Забавно, что код, не выполняющий print в любом виде, выполняется многопоточно без проблем.
- DRVTiny ★★★★★ (29.06.2017 21:53:46)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 19:07:27
- С вашей логикой нужно вообще подальше от IT держаться.
- RazrFalcon ★★ (29.06.2017 22:11:50)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:53:27
- вообще 99% смысла потоков - в том, чтобы легко шарить данные.
- в моде вроде имутабельность, не?
- Rastafarra ★★★ (30.06.2017 6:59:32)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 20:40:56
- Именно по той самой причине, о которой я сказал в самом начале: это не параллелизм, это какая-то имитация бурной деятельности.
- Потому что многопоточность - это многопоточность, параллелизм - это параллелизм.
- anonymous (30.06.2017 11:24:03)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 17:58:39
- Например, подход python в духе «20 инструкций этого потока, потом 20 - другого» - хорош тольк тогда, когда 20 инструкций одного потока выполняются примерно столько же, сколько и 20 другого, а ещё есть данная Высшими Силами абсолютная гарантия того, что одна из 20-ти инструкций не приведёт к подвисанию потока на пару минуточек.
- Потому что GIL надо отпускать! Или вам сказали что в питоне всё так просто, что справится любой идиот, и вы поверили?
- anonymous (30.06.2017 11:26:36)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от anonymous 30.06.2017 11:24:03
- Многопоточность - это либо параллелизм, либо псевдопаралеллизм, и нужна в любом случае для параллельного выполнения заданий. А уж для чего они выполняются параллельно (даже если и псевдо-) - дело десятое. «Многопоточность» в полном вакууме не существует. Я понимаю любовь программистов к придумываемым ими же словечкам, но не нужно голову-то терять.
- DRVTiny ★★★★★ (30.06.2017 13:00:06)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 30.06.2017 13:00:06
- anonymous под многопоточностью понимает concurrency. Есть 2 well established слова *concurrency* и *parallelism*, на русский переводящиеся, как «параллельные вычисления», хотя термины разные и оно не является «псевдо-другим».
- qnikst ★★★★★ (30.06.2017 15:00:01)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 29.06.2017 21:50:40
- Ну вот объясни мне, уважаемый эксперт, почему вы настолько экспертны? Ваша экспертность резанула мне глаз даже при пролистывания темы «по диагонали».
- Переключение дороже в 100 раз даже на модных процессорах
- Не верно. Никакое переключение не дороже, да и его там нет. Ваши представление о мире осталось за гранью реальности - на обочине истории, а именно примерно в районе 95года, а может даже раньше.
- Гринтреды го нихрена не быстрее птредов. Я советую, всё же, соотносить свои «познания» с реальностью, а не маркетинговым булшитом ориентированным на терминально лсных домохозяек.
- posix_thread 8Mb, но тюнится, так?
- Та же самая проблема. Эти 8мб никакого отношения к тем мегабайтам, о которых ты подумал, не имеют.
- Я не вижу проблем в шедулере внутри шедулера, более того я вижу смысл от самописанного шедулера, внутри языка с легкими потоками. Это может быть полезно когда нужно реализовывать разные стратегии планировки, которые зависят от задачи, например FIFO для IO bound и FILO для CPU bound тредов.
- А можно узнать - зачем нужны эти «грин»-«треды»?
- saifuluk (01.07.2017 0:19:28)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 01.07.2017 0:19:28
- цифры, бенчмаркинг статьи, развернутые комментарии, если ты вообще хочешь, чтобы твоё мнение было интересно. Пока ты неотличим от низкоуровневого тролля.
- qnikst ★★★★★ (01.07.2017 6:03:02)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 01.07.2017 6:03:02
- цифры, бенчмаркинг статьи
- В том и проблема, что твои представления о мире заканчивают на маркетинговых днищестатьях для домохозяек.
- При этом меня удивляет то, что ты пруфцевать не должен, а я должен? При этом ты никак не попытался защитить свою ТЗ и опровергнуть мою, а из этого следует лишь одно - ты ретранслятор.
- Если бы ты знал почему там 8мб - ты мне доказал, что я неправ. Но ты не смог. И причину я уже назвал.
- Писать и доказывать каждому ламерку что-то мне лень. Твои ответы для любого вменяемого человека уже показательны, а вернее определяют тебя за ноль.
- А по поводу бенчмарков: https://habrahabr.ru/post/306768/#comment_9725810
- 100500 тредов запускается? Каждый по 8 метров. И того в районе терабайта по памяти, если считать по твои выкладкам, что явно несоответствует реальности.
- Так же и с производительностью самих тредов.
- Как же я люблю вас, экспертов. Прочитал какую-то херню в каком-то днищебложике и уже решил, что он эксперт и может кому-то что-то ретранслировать. Это так не работает.
- saifuluk (01.07.2017 17:44:24)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 01.07.2017 17:44:24
- А по поводу бенчмарков: https://habrahabr.ru/post/306768/#comment_9725810
- Для начала — автор комментария по ссылке даже не в курсе, отчего он упёрся в лимит в 30к потоков. Ну вот даже не подозревает и узнать не хочет. Это забавно.
- А так вариант на Go отрабатывает у меня за 0m0,113s, тогда как вариант с pthread — за 0m0,727s. В обоих случаях брал максимальное время. Если брать среднее, то выходит 0,05 секунд против 0,65. И вариант с реальными тредами сегфолтится от раза к разу, ибо дефолтные лимиты я не увеличивал.
- i-rinat ★★★★★ (01.07.2017 18:00:12)
- Ответить на это сообщение Ссылка
- Сообщение удалено merhalak по причине Уже написали (0)
- Ответ на: комментарий от DRVTiny 29.06.2017 21:04:27
- Нет. Считай там внутренний планировщик может присутствовать, который разбрасывает «зеленые» по системным. Зелеными они быть не перестают, просто работают поверх не одного системного, а пула системных.
- merhalak ★★★ (01.07.2017 19:16:22)
- Ответ на: комментарий от DRVTiny 29.06.2017 17:53:27
- Копируют потому, что на шареные нужно ставить блокировки, и прощай параллелизм.
- anonymous (01.07.2017 19:22:27)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от qnikst 01.07.2017 6:03:02
- низкоуровневого тролля
- DirectTroll12®
- anonymous (01.07.2017 19:28:08)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 20:54:33
- В современном линуксе тик шедулера отключается, если на ядре проца один поток.
- anonymous (01.07.2017 19:34:36)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 01.07.2017 18:00:12
- Для начала — автор комментария по ссылке даже не в курсе, отчего он упёрся в лимит в 30к потоков. Ну вот даже не подозревает и узнать не хочет. Это забавно.
- Я смотрел код ведра, считал эти дефайны и на какой-то итерации я понял, что ограничение это ограничено чисто шизофренией и мне это стало не интересно. Если ты думаешь, что какой-то нулёвый алёша в чём-то может разобраться лучше меня - у меня для тебя плохие новости.
- Никакого харварного ограничения нет, а читать и угадывать почему кто-то запилил так, как ему захотелось - мне неинтересно.
- Точно так же мне не интересна и эта бесполезная задача запуска более 30к тредов. Я доказал, что го-адепты балаболы. Доказал. Остальное меня волнует мало.
- Если брать среднее, то выходит 0,05 секунд
- Врёшь. https://pastebin.com/cPUYxKDs
- По поводу всего остального. Из твоего ответа ничего не слеудет. Запущено больше рама/8мб? Больше. Разница не в 100раз? Не в сто. Разницу ты намерил в 6.
- saifuluk (01.07.2017 20:06:00)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 01.07.2017 20:06:00
- разобраться лучше меня
- Да кто угодно разбирается в этом лучше тебя. Нет в ядре жёсткой границы в 30к нитей. У меня в системе, например, лимит по умолчанию установлен в десять с чем-то тысяч. Но это легко поднимается, и 100500 нитей легко создаются.
- Врёшь. https://pastebin.com/cPUYxKDs
- Ой. Да ты просто туповат.
- i-rinat ★★★★★ (01.07.2017 20:33:13)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 01.07.2017 20:33:13
- Да кто угодно разбирается в этом лучше тебя. Нет в ядре жёсткой границы в 30к нитей. У меня в системе, например, лимит по умолчанию установлен в десять с чем-то тысяч. Но это легко поднимается, и 100500 нитей легко создаются.
- Поподробнее об этом. Как мне запустить 100500 нитей?
- Ой. Да ты просто туповат.
- Действительно.
- saifuluk (01.07.2017 21:12:49)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 01.07.2017 21:12:49
- Как мне запустить 100500 нитей?
- Обычно ограничено число процессов, число нитей, число открытых файлов и число mmap областей. Ещё в случае с systemd есть ограничения на число pid в cgroup. Все эти лимиты нужно увеличить.
- i-rinat ★★★★★ (01.07.2017 21:49:09)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 01.07.2017 21:49:09
- Обычно ограничено число процессов, число нитей, число открытых файлов и число mmap областей.
- Всё это стоит выше ляма. макстред( не ставится выше 100к с копейкой). Неработает. На всё это я выходил. Всё это я увеличивал. Как и говорил - я вышел на ограничение в ведре - уже не помню что он там считал, толи раму, толи вм, но в любом случае там именно что упиралось в захардкоренное значение.
- saifuluk (01.07.2017 22:46:55)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 01.07.2017 22:46:55
- там именно что упиралось в захардкоренное значение
- Не видел такого. У меня увеличивается без проблем.
- i-rinat ★★★★★ (01.07.2017 22:55:46)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 01.07.2017 22:55:46
- В таком варианте, работает?
- int main() {
- std::atomic<size_t> c{0};
- size_t n = 100500;
- for(size_t i = 0; i < n; ++i) std::thread{[&](){
- ++c;
- sleep(10);
- }}.detach();
- while(c < n) {}
- fprintf(stderr, "%lu\n", (size_t)c);
- }
- а n = 150000?
- Может в системд какая проблема - у меня раньше его не было. Но я никакие лимиты в нём не ставил. Поищу потом.
- saifuluk (01.07.2017 23:05:03)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 01.07.2017 23:05:03
- а n = 150000?
- В 125 тыщ с копейками упирается. Выяснилось, что в ядре не даёт установить лимит на число нитей выше определённого значения, так чтобы занимаемый ими объём не превышал одной восьмой от доступного ОЗУ. Ставишь больше памяти — получаешь больше нитей.
- i-rinat ★★★★★ (01.07.2017 23:46:47)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 01.07.2017 23:46:47
- Ну, собственно, это я и находил тогда. Действительно - вспомнил, что зависело от кол-ва памяти. А ты обвинял меня, подлец, в том, что я не разбирался. Фу таким быть.
- Ну сейчас у меня падает совсем на копейках - значит это подлое системд меня где-то подставило.
- saifuluk (02.07.2017 0:10:05)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 02.07.2017 0:10:05
- что я не разбирался
- Ну ты же не разобрался. Оно ведь ищется легко и обходится без особых проблем.
- Но ты только подумай — миллион нитей сожрут как минимум 16 гигов. Но ты эти гигабайты не увидишь.
- i-rinat ★★★★★ (02.07.2017 0:28:04)
- Последнее исправление: i-rinat 02.07.2017 0:28:16 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 29.06.2017 21:04:27
- Не понимаю. Совсем. Есть потоки исполнения, давайте говорить о них. Потоки исполнения в рамках одного процесса просто разделяют данные, таблицы страниц ОЗУ, у них один и тот же TSS.
- Так вот, для того, чтобы «зелёные потоки» заняли несколько ядер - они должны работать в разных настоящих потоках исполнения pthreads. А после этого они уже, на мой взгляд, перестают быть таким уж зелёными, разве нет?
- У тебя есть 6 ядер. Только для тебя. Повесь на них 6 потоков и context switch не произойдет никогда. Но у тебя 12 задач. И ты вешаешь 2 задачи на одно ядро – получаешь 1 context switch на каждое ядро на шаг работы программы. Но 6 твоих задач могут быть «зелеными» – они могут безопастно засыпать и просыпаться в любой момент. Тогда ты выделяешь (например*) 3 ядра для «классических» потоков и 3 ядра для «зеленых» и получаешь в два раза меньше context switch'ей.
- *в реальности надо бенчить что даст максимальный перфоманс.
- Stil ★★★★★ (02.07.2017 1:59:23)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 02.07.2017 0:28:04
- Ну ты же не разобрался. Оно ведь ищется легко и обходится без особых проблем.
- Обходится что?
- Ты мне предлагаешь вот это обойти: https://code.woboq.org/linux/linux/kernel/fork.c.html#427
- Но ты только подумай — миллион нитей сожрут как минимум 16 гигов. Но ты эти гигабайты не увидишь.
- Сколько они сожрут в го? Это всего менее 20к на нить + стек. Хотя я, конечно, не понимаю нахрена ядру целых 20к на нить, но что поделать.
- saifuluk (02.07.2017 2:53:39)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 02.07.2017 2:53:39
- Ты мне предлагаешь вот это обойти
- Для экспериментов — можно. Для продакшена столько нитей использовать — идиотизм. Больше 200–300 уже будут доставлять проблемы. man c10k problem.
- Сколько они сожрут в го?
- Спроси у специалистов по Go. Но я сомневаюсь, что там много. Это не эмуляция фиберов для обычного Си-кода, там нет нужды выделять стек и переключаться на него. По сути, это эквивалент кода на колбеках в Си, только без боли.
- Хотя я, конечно, не понимаю нахрена ядру целых 20к на нить
- Тут тебе нужно почитать про то, что такое нити в Linux и чем они отличаются от процессов.
- i-rinat ★★★★★ (02.07.2017 12:40:28)
- Последнее исправление: i-rinat 02.07.2017 12:40:54 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от Stil 02.07.2017 1:59:23
- и получаешь в два раза меньше context switch'ей.
- Плюс сбросы кеша при одновременном доступе разных потоков, работающих с одной и той же страницей памяти.
- anonymous (02.07.2017 13:19:59)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 02.07.2017 12:40:28
- Для экспериментов — можно. Для продакшена столько нитей использовать — идиотизм. Больше 200–300 уже будут доставлять проблемы.
- Не будут.
- man c10k problem.
- Это убогий мусор для развода ламерков и строчения статеек на помойках, который протух и не актуален уже десять лет. Как и рассуждения про «медленные сисколы», «медленные треды», «8мегабайт на тред + тачка виснет уже на 20» и прочий мусор.
- Я тут уже много подобных экспертов-жертв протухшей макулатуры видел. Одни мне доказывали, что спринтф+мусор будут быстрее open+openat, другие что на 50тредах загнётся. В конечном итоге все они из треда почему-то улетали.
- Спроси у специалистов по Go. Но я сомневаюсь, что там много. Это не эмуляция фиберов для обычного Си-кода, там нет нужды выделять стек и переключаться на него.
- Это 20к не включая стэк. Да и вроде сравниваем мы гринтреды( т.е. юзерспейс треды) и обычные( кернелспейс). И там и там должен быть стек.
- Смысл треда в том, чтобы можно было его стопнуть в любом месте. Естественно, на самом деле треды не нужны и всё делается в 10раз быстрее и лучше без них. Но это никого не волнует. Сравнивалось то, что сравнивалось.
- Тут тебе нужно почитать про то, что такое нити в Linux и чем они отличаются от процессов.
- Я не об этом. Это мне никак не поможет и ничего мне не даст. Естественно если оно память жрёт, то оно там что-то хранит. А что конкретно оно там хранится - меня волнует мало. Из нужного там контекст на максиму 1к + ну максимум 2-3к. Остальное всё - это заморочки ведра, которые к делу отношения не имеют.
- Первый тык: https://code.woboq.org/data/symbol.html?root=../linux/&ref=task_struct
- А тут уже -3к на ненужную отладочную фигню бам, а там ещё нума-хренума, а там ещё битмаска на 500+ ненужных цпу. Всякие цгрупы и прочее.
- Смысл моего вопроса заключается в том, что я не вижу того, что можно было запихнуть в этом тред, из вещей напрямую относящихся к треду. Я их не вижу - их и нету. А засунуть туда можно всё что угодно.
- saifuluk (02.07.2017 20:49:23)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 02.07.2017 20:49:23
- В конечном итоге все они из треда почему-то улетали.
- Ну давай сделай веб-сервер по принципу одно соединение — один тред. Посмотрим, сколько он выдаст и когда он загнётся. Сравниваем с nginx. Или ты сразу из треда улетаешь? ^_^
- сравниваем мы гринтреды( т.е. юзерспейс треды) и обычные( кернелспейс) <...> И там и там должен быть стек.
- Лолшто? Зачем?
- Из нужного там контекст на максиму 1к + ну максимум 2-3к.
- Ух-ты. Ни малейшего представления о том, что там хранится, и при этом полное нежелание выяснять. Но точно знает, сколько места хватит для хранения неизвестного набора данных. Волшебник, прям.
- i-rinat ★★★★★ (02.07.2017 21:21:12)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 02.07.2017 21:21:12
- Ну давай сделай веб-сервер по принципу одно соединение — один тред. Посмотрим, сколько он выдаст и когда он загнётся. Сравниваем с nginx. Или ты сразу из треда улетаешь? ^_^
- Пошла херня опять. То он болтает про «man c10k problem», то как только поплыл уже начинает сливаться на «сделай быстрее нгинкса». c10k - это про 10к коннектов, а не про нгинкс. Работоспособность 10к тредов доказана? Доказана. Вылетел? Вылетел.
- Ах ну и да, вебсервер не нужен. Нгинкс - это пускалка пхп. Пхп это пускалка ворпресса. Вордпресс больше 50рпс не выдаёт. 50тредов за глаза хватит.
- Лолшто? Зачем?
- Я написал. Для того, чтобы мочь стопнуть его в любой момент. И вообще стопнуть.
- Ух-ты. Ни малейшего представления о том, что там хранится, и при этом полное нежелание выяснять.
- Опять болтаешь херню. То, что там хранится никакого отношения к теме не имеет. То, что хранится в линуксе - это отдельная реализация и напихать в неё можно всё что угодно. Но к тому, что это хранимое необходимо для работы тредов вообще это отношения не имеет.
- Ты можешь попытаться взять ту структуруку и попытаться обосновать необходимость каких-то полей в контексте не линукса и вылетить из треда.
- Я тебе даю задачу - каким образом цгрупс связан с тредами? И нахрена он нужен? А он не нужен. Точно так же я тебе привёл пример с CONFIG_LOCKDEP, которйы нахрен не упёрлся тредам.
- Ты ни на один вопрос не ответил и причина проста - вылетишь из треда в момент.
- saifuluk (02.07.2017 21:52:48)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 02.07.2017 21:52:48
- c10k - это про 10к коннектов, а не про нгинкс. Работоспособность 10к тредов доказана? Доказана. Вылетел? Вылетел.
- Вот ты и слился. Как языком молоть, так крутой. А на простенькой задаче лапки поднял и что-то там про работоспособность мямлит. Нет, пока не покажешь рабочий пример, ты просто балабол.
- Нгинкс - это пускалка пхп.
- Какую же ты чушь пишешь.
- Я написал. Для того, чтобы мочь стопнуть его в любой момент. И вообще стопнуть.
- Ты придумал что-то своё и теперь споришь. Какой смысл спора, если ты витаешь в каком-то своём мире и с общепринятыми понятиями не пересекаешься?
- Я тебе даю задачу
- Сервер сначала напиши. Ишь чего о себе возомнил.
- вылетишь из треда в момент.
- Если ты не осилишь базовые вещи сначала освоить, то таки да, смысла с тобой разговаривать больше нет. Можешь считать, что я «вылетел из треда». Порадуйся там, что ли. Победитель, все дела. :-)
- i-rinat ★★★★★ (02.07.2017 23:23:56)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 02.07.2017 21:21:12
- Мне всегда по наивности и незнанию казалось, что стек нужен для вызова функций: конечно разные треды не могут использовать один и тот же стек при вызове функций, по этой самой причине у каждого треда он свой. Собственно, стек при вызове функций тоже не сильно нужен, ведь можно передавать параметры через регистры, но есть одна засада, которую не обойдёшь никак: в стек отправляется адрес смещения в сегменте cs, на который нужно будет вернуться инструкцией ret (можно и «вручную» сделать то же, что делает ret). Хотя я лично всеми оставшимися конечностями за то, чтобы передавать параметры в регистрах процессора, в том числе и указатели на области памяти в сегментах данных, что в общем случае нарушает ключевую концепцию функциональщины (результат работы функции определяется только её входными параметрами, у функции не должно быть побочных эффектов).
- DRVTiny ★★★★★ (03.07.2017 14:03:49)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от saifuluk 02.07.2017 20:49:23
- Смысл треда в том, чтобы можно было его стопнуть в любом месте.
- В стране торгашей, занимающихся уёб-комерцией - да.
- А так вообще смысл тредов в организации параллельных вычислений. Есть ещё всякие неведомые штуки типа MPI, которые позволяют организовать распределённые вычисления, но всё это в СР не нужно, да. У нас только веб-серверы, реклама и массовые перепродажи дешёвого китайского дерьма. Обслужить (читай - на*бать) больше тупоголовых потребл*дских хомячков в единицу времени - вот предел мечтаний отчественного бузинеса. И тут конечно IO страшно всё тормозит, самая критичная задача - обойти треклятое IO на повороте, а не использовать максимальное число циклов CPU в единицу времени.
- У СР один верный путь - в СГ. Это давно известно, нам всем туда, так что давайте идти туда дружно.
- DRVTiny ★★★★★ (03.07.2017 14:10:33)
- Последнее исправление: DRVTiny 03.07.2017 14:11:09 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 03.07.2017 14:03:49
- То, что ты пишешь — в каком-то смысле верно. Если хочется сделать сопрограммы, которые могут использоваться в Си-программах, без стека не обойтись. И существующие реализации сопрограмм переключают стек.
- Но если у тебя другой язык, требование «настоящего» стека пропадает. Ведь на самом деле тебе нужен не стек, а контекст задачи. И тут уже переключать стек не нужно. Можно, например, неявно передавать указатель на структуру в каждую функцию.
- i-rinat ★★★★★ (03.07.2017 14:16:28)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от Stil 02.07.2017 1:59:23
- получаешь 1 context switch на каждое ядро на шаг работы программы.
- Что ещё за шаг работы программы?
- Мне кажется или со вчерашнего дня принудительное переключение потоков исполнения по самому обычному таймеру уже отменили? Теперь ОС знает тайны того кода, который внутри неё работает - и даже про некие «шаги работы» осведомлена.
- Т.е. не просто по тику таймера планировщик ядра, отобравший управление у предыдущего потока исполнения принимает решение о переключении на следующий в соответствии с заданной стратегией планирования (которую, AFAIK, можно менять прямо во время работы ОС) - а что-то такое вообще магическое происходит с шагами. Где почитать об этом?
- DRVTiny ★★★★★ (03.07.2017 14:17:17)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 03.07.2017 14:16:28
- Какой бы ни был язык, он же всё равно как минимум в своём ядре использует банальную инструкцию call (если речь об Intel-архитектуре, о других ничего не скажу, не знаю). И внутри потока вызовы встроенных функций ЯП - скорее всего, те же call'ы. А они без стека не живут, к сожалению.
- Ну и для каждого потока ядро ОС хранит его состояние (регистры процессора в первую очередь) - только это никакой не «стек». Вроде бы даже ядро Linux не забило на TSS, использует штатную реализацию Intel, хотя для переключения задач Торвальдс изобрёл свой легковесный велосипед.
- DRVTiny ★★★★★ (03.07.2017 14:24:27)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 03.07.2017 14:24:27
- Хотя, гм, насчёт никакого не стека я что-то гоню. Блин, уже забыл всё напрочь, что знал насчёт всех этих TSS, LDT, GDT, IDT, PDPR
- DRVTiny ★★★★★ (03.07.2017 15:06:16)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от DRVTiny 03.07.2017 14:24:27
- В контексте Go (и не только), ЕМНИП количество «потоков» (в данном случае сопрограмм - goroutine, которым нужен только контекст) != количество нативных потоков и их отображение решается внутренним планировщиком.
- SkyMaverick ★ (03.07.2017 15:44:04)
- Последнее исправление: SkyMaverick 03.07.2017 15:45:38 (всего исправлений: 1)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от SkyMaverick 03.07.2017 15:44:04
- Да, так и есть. Обсуждали выше.
- DRVTiny ★★★★★ (03.07.2017 16:58:35)
- Ответить на это сообщение Ссылка
- Ответ на: комментарий от i-rinat 02.07.2017 23:23:56
- Вот ты и слился. Как языком молоть, так крутой. А на простенькой задаче лапки поднял и что-то там про работоспособность мямлит. Нет, пока не покажешь рабочий пример, ты просто балабол.
- Смотри, ты утверждаешь c10k и прячешься за нгинкс. Т.е. ты утверждаешь по сути «не можешь», я утверждаю обратное. Почему ты можешь использовать как пруф готовое, а я не могу?
- Тем более c10k не имеет никакого отношения к вебчику.
- Ты придумал что-то своё и теперь споришь. Какой смысл спора, если ты витаешь в каком-то своём мире и с общепринятыми понятиями не пересекаешься?
- Да нет, ты просто поплыл в очередной раз. Общепринятое понятие «Тред» никаким образом не относится к понятию «конкретная реализация тредов в линуксе». Я говорил о первом, а ты слился на второе. Далее сломался и начал нести бред.
- Если ты не осилишь базовые вещи сначала освоить, то таки да, смысла с тобой разговаривать больше нет. Можешь считать, что я «вылетел из треда». Порадуйся там, что ли. Победитель, все дела. :-)
- Бла-бла. Домохозяйки в ютубе мне то же самое говорят. Как только одна извилина закипает - в меня начинает литься «да, я не я - ты не понимаешь базовые вещи».
- Причина этого проста. Любой адепт и любяа домохозяйка является ретранслятором того, что услышала в интернете. Она просто болтает и ретранслирует. Т.е. каждая «вещь», которая крутится в её черепушки не имеет никакого обоснования. Она просто там плавает.
- И когда ты начинаешь об этих вещах спрашивать домохозяйку - как и почему. Она не может ответить. У неё просто в голове есть это поверье и всё. Она не может ничего с эти поделать.
- Она привыкла, что её окружение читала те же интернеты и влито в собратьев то же, что влито и в её черепушку. Да и отбор происходит по этому «влитому». И внутри этого круга, влитое считается как само собою разумеющиеся. Это базовые вещи, вещи которые все знают. Все их знают просто потому, что знают. Как, почему и где они возникли? Кого это волнует.
- saifuluk (03.07.2017 22:19:33)
- Ответить на это сообщение Ссылка
- Сообщение удалено Pinkbyte по причине 4.3 Провокация flame (-2)
- Ответ на: комментарий от DRVTiny 03.07.2017 14:10:33
- В стране торгашей, занимающихся уёб-комерцией - да.
- В реальном мире. Выше вон пациент попытался слиться на «контекст для каждой функции» - типичная история. Мы говорим о стеке как о том, что требует это нечто, что требует прицепить к треду кусок памяти.
- Если ты хочешь на каждый локальный объект доблить хип - долби. Хочешь весь контекст собирать для каждой функции отдельно - в любом случае это будет стэк.
- Нужно где-то хранить объекты созданные внутри функции, нужно куда-то записать «куда вернутся». Куда?
- вот предел мечтаний отчественного бузинеса.
- Причём тут слово «отечественного»? Тут должно быть слово «любого».
- И тут конечно IO страшно всё тормозит, самая критичная задача
- Ничего оно не тормазит и никакие потокик это не решают.
- Убогая архитектура, убогая вера в то, что «много тредов» что-то дадут. Зачем из 100тредов долбить ядро, которое потом опять соберёт всё это в один?
- На уровне работы с сокетами мы уже осилили всю бесполезность сего действа, а вот в контексте ИО ещё не осилилось.
- saifuluk (03.07.2017 22:29:55)
- Ответ на: комментарий от saifuluk 03.07.2017 22:19:33
- Почему ты можешь использовать как пруф готовое, а я не могу?
- Моги. Возьми Apache старенький, например, и выжми на нём обработку десяти тысяч соединений одновременно.
- Тем более c10k не имеет никакого отношения к вебчику.
- Ты вообще с этой планеты?
- Общепринятое понятие «Тред» никаким образом не относится к понятию «конкретная реализация тредов в линуксе».
- Во-во, ты уже плывёшь, но всё ещё пытаешься делать весёлую мину при плохой игре.
- Домохозяйки в ютубе мне то же самое говорят.
- Постыдился бы в приличном обществе такое рассказывать.
- Кого это волнует.
- Смотри. Ты сейчас пишешь на русском языке, а не на придуманной тобой тарабарщине. Знаешь зачем? Чтобы тебя понимали. То же самое и с терминологией, это часть языка.
- Пока что я вижу, что ты пыжишься. Судя по эмоциональному окрасу, ты там какой-то крутой спец. Только вот кроме тебя никто твоего величия понять не может, потому что твой язык известен только тебе одному.
- Хочешь чтобы тебя понимали — выражайся яснее.
- i-rinat ★★★★★ (03.07.2017 22:30:06)
- Ответить на это сообщение Ссылка
- Сообщение удалено Pinkbyte по причине 4.3 Провокация flame (-2)
- Ответ на: комментарий от i-rinat 03.07.2017 22:30:06
- Моги. Возьми Apache старенький, например, и выжми на нём обработку десяти тысяч соединений одновременно.
- Я уже обосновал тут то, что 10к тредов спокойно работают. Мне пойти тебе хелворд написать? Ты не можешь из А вывести Б?
- Во-во, ты уже плывёшь, но всё ещё пытаешься делать весёлую мину при плохой игре.
- И никаких обоснований твоих потугами не последовало, так? Ты мне доказал то, что говорил я о чём-то ином? Нет. Ты начал нести бред, а как засыпался продолжил нести другой.
- Постыдился бы в приличном обществе такое рассказывать.
- Да не, просто меня удивляет это. Как мне пацаны из себя строят, а по повадкам и понимают типичные домохозяйки. Только набор ключевых слов разный.
- Пока что я вижу, что ты пыжишься. Судя по эмоциональному окрасу, ты там какой-то крутой спец. Только вот кроме тебя никто твоего величия понять не может, потому что твой язык известен только тебе одному.
- Понять могут все, кто хоть что-то понимает в теме. Да и ни о каком величии я не говорю. Всё, о понимании чего со своей стороны я заявляю - я понимаю. Это доказано сотни и тысячи раз.
- А то, что кто-то мне рассказывает «я не верю, я не понимаю» - ну дак тебя никто не заставляет. Ты опровергни то, что сказал я. Не можешь? Ну дак это твоя проблема. У балаболов всегда есть расхождение между «могу» и «заявляю».
- saifuluk (03.07.2017 23:28:33)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 03.07.2017 23:28:33
- Я уже обосновал тут то, что 10к тредов спокойно работают. Мне пойти тебе хелворд написать? Ты не можешь из А вывести Б?
- У тебя уже было времени чтобы десять раз его написать. Но что-то я не вижу кода. Ты хотел взять готовый код, так бери. Чего на попятную пошёл? Погуглил-почитал и понял, что сморозил, а теперь пытаешься выгородиться? :-D
- У балаболов всегда есть расхождение между «могу» и «заявляю».
- Ты пока что только языком чешешь.
- Ты опровергни то, что сказал я. Не можешь? Ну дак это твоя проблема.
- Чайник Рассела.
- Знаешь, не пытайся больше ничего писать. Мне надоело тебе пытаться объяснить твои заблуждения.
- i-rinat ★★★★★ (03.07.2017 23:42:33)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от i-rinat 03.07.2017 23:42:33
- У тебя уже было времени чтобы десять раз его написать. Но что-то я не вижу кода. Ты хотел взять готовый код, так бери. Чего на попятную пошёл? Погуглил-почитал и понял, что сморозил, а теперь пытаешься выгородиться? :-D
- Ты слился в тот момент, когда задал идиотское условие. Нудаладно. Давай ещё раз. Что я должен написать?
- Хорошо, определи критерий решения c10k. Чётко и ясно. Играем на звёзды, кстати.
- Чайник Рассела.
- Не относящие к теме, бесполезно поверье в среде школьников. Твои потуги не являются ничем, а значит ты их доказывать должен точно так же. Естественно ты - обыкновенный ретранслятор поверьев из интернета и именно это не позволяет тебе ничего доказать, ведь поверья из интернетов доказательством не являются.
- saifuluk (04.07.2017 0:53:13)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 04.07.2017 0:53:13
- Хорошо, определи критерий решения c10k. Чётко и ясно.
- HTTP реверс-прокси, за которым один медленно отдающий данные бекенд. Твой реверс-прокси должен адекватно обрабатывать 10 тысяч одновременных подключений. Для определённости бекенд отдаёт файл длиной 8192000 байт с ограничением скорости в 8192 байта в секунду. Твоя реализация должна обрабатывать каждое соединение в отдельной нити. Полной реализации HTTP не требуется, допустима реализация подмножества HTTP/1.0. Достаточна реализация identity кодировки передачи. Реализация keep-alive — на усмотрение. Реализованная часть протокола не должна противоречить RFC 2616.
- От тебя требуется только реализация реверс-прокси. В качестве бекенда можешь взять любой понравившийся веб-сервер. Главное — чтобы он не был узким горлышком в системе.
- Играем на звёзды, кстати.
- Соломку подстилаешь уже? :-D
- доказать
- Удобная у тебя позиция. Несёшь чушь, а другие должны её опровергать. Нет, это не работает. Есть некоторое сложившийся здравый смысл. Не факт, что он не содержит ошибок. Но если ты заявляешь что-то, что идёт с ним в разрез, бремя доказательства лежит на тебе.
- i-rinat ★★★★★ (04.07.2017 1:20:17)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 04.07.2017 0:53:13
- Кстати. Года два назад в интернете уже широко гуляли инструкции по тюнингу nginx и сетевой подсистемы Linux для обработки миллиона одновременных подключений на одном сервере. Сейчас это можно даже назвать обыденностью. Текущая проблема — 10 миллионов одновременных подключений. Железо уже может, пока упираются в ядро.
- На нитях реализовывать, ага.
- i-rinat ★★★★★ (04.07.2017 1:26:57)
- Сообщение удалено Pinkbyte по причине 4.3 Провокация flame (-2)
- Ответ на: комментарий от i-rinat 04.07.2017 1:20:17
- HTTP реверс-прокси, за которым один медленно отдающий данные бекенд. Твой реверс-прокси должен адекватно обрабатывать 10 тысяч одновременных подключений. Для определённости бекенд отдаёт файл длиной 8192000 байт с ограничением скорости в 8192 байта в секунду. Твоя реализация должна обрабатывать каждое соединение в отдельной нити. Полной реализации HTTP не требуется, допустима реализация подмножества HTTP/1.0. Достаточна реализация identity кодировки передачи. Реализация keep-alive — на усмотрение. Реализованная часть протокола не должна противоречить RFC 2616.
- Пошла херня. Я так и знал, что балаболка будет юлить до последнего. Будет всё больше и больше ставится условий, специально, чтобы это тратило всё больше и больше времени, и естественно на что я не пойду.
- Как только я выкачу c10k на тредах - балаболка улетит из треда. А она улетит - это 100%. Далее пойдут сливы на тему «треды медленнее», а далее пойдут сливы на память. И так буде бесконечно.
- The C10k problem is the problem of optimising network sockets to handle a large number of clients at the same time.[1]
- sockets. В очередной раз пробалаболил.
- В рамках c10k определяется одновременную обработку 10к сокетов. Трепут никак не определяется. Никаких файлов, никакой другой херни нет. Никакого хттп, вебчика и прочего нет.
- Поэтому ты, либо идёшь и правишь википедию, либо сливаешься из треда. Обработку 10к сокетов я выкачу. И не забывай про звёзды.
- Удобная у тебя позиция. Несёшь чушь, а другие должны её опровергать. Нет, это не работает. Есть некоторое сложившийся здравый смысл. Не факт, что он не содержит ошибок. Но если ты заявляешь что-то, что идёт с ним в разрез, бремя доказательства лежит на тебе.
- Как я и говорил. Есть общество сектантов, в рамках которого те поверья, что ты ретранслируешь доказательствами не облагаются. Можно нести любую херню под предлогом «все это знают».
- saifuluk (04.07.2017 1:36:54)
- Сообщение удалено Pinkbyte по причине Блокировка пользователя с удалением сообщений (0)
- Ответ на: комментарий от i-rinat 04.07.2017 1:26:57
- Во, балаболка уже пошла сливаться. Погуглил? Щас пойдёт вся фигня. А сделай мне нгинкс, а с10к уже устарели( самое смешно, что выше я говорил, что они протухли, но балаболка не унималась, а сейчас вдруг оказывается, что оно устарело. Вот так новость). Далее пойдут «а на слабом процессоре», «а если у меня 100мегабайт памяти», «а если у МКашка», «а нгинкс быстрее», «а 10к мало» и прочее и прочее.
- Это предсказуемо. А пока я дают тебе время на подготовку к вылету и на прощание со звёздами.
- saifuluk (04.07.2017 1:40:24)
- Сообщение удалено Pinkbyte по причине Блокировка пользователя с удалением сообщений (0)
- Ответ на: комментарий от i-rinat 04.07.2017 1:26:57
- Данный балабол знает, что споря с любым моим утверждением ты уже проиграл по определению, особенно шансов нет у подобных тебе.
- Именно поэтому ты и начал сливаться на «а победи нгинкс» - ты знал, что проиграл и ты начал заранее пытаться подготавливать пути ко сливу. Но в любом случае я добрый и хотя ты бы уже давно вылетел из треда за балабольство после моей одной цитаты из википедии.
- saifuluk (04.07.2017 1:45:28)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 03.07.2017 22:29:55
- Я как раз против IO через треды, я за асинхронность на уровне системных вызовов. С моей точки зрения треды нужны прежде всего для рапараллеливания вычислений, а не для убогих попыток обойти недостатки ядра ОС.
- DRVTiny ★★★★★ (04.07.2017 1:57:17)
- Сообщение удалено Pinkbyte по причине 4.3 Провокация flame (-2)
- Ответ на: комментарий от i-rinat 04.07.2017 1:26:57
- Ну и самое главное. Пациент поплыл просто феерически с с10к. Пытаясь врать и пытаться всех обмануть.
- Смысл с10к, как и один коннект==1тред основана на ИО, а именно блокирующей природе рид/врайтов. Именно поэтому там и взялись треды.
- Сама обработка хттп, хреноххпп, пхпешки и прочей херни к этим тредам отношения не имеет и может быть организована как угодно.
- Т.е. потоки нужны только для того, чтобы позволить блокирующим ридам/врайтам в сокеты быть параллельными. Всё.
- Эту реальность балабол пытается подменить на свою шизофрению, подменяя те базовые понятия, о которым он сам и болтал.
- Ну и самое главное. с10к, с100к, с1кк - это проблемы ни коннекшенов, ни вебсерверов, ни ядра, ни потоков. Это проблема сокетов. Сокеты - есть ущербанское, убогое и мусорное api. От любой вменяемой реализации юзерпейс tpc-стека ядро улетает в помойку, вместе с нгинксом и прочей хернёй. И причина проста - api.
- Там не стоит с1кк, ни с1кккк проблем.
- saifuluk (04.07.2017 2:04:07)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 04.07.2017 1:36:54
- Будет всё больше и больше ставится условий
- Ты просил чётко и ясно? Получил чётко и ясно. Чего тебе ещё нужно?
- и естественно на что я не пойду
- И это ты мне говоришь про сливание? Ты тут уже облажался по полной, даже не начав код писать.
- Как только я выкачу c10k на тредах ...
- Ты сначала выкати.
- sockets. В очередной раз пробалаболил.
- Да ты, я вижу, дурачок. Кому нужны сокеты сами по себе? Главное — полезная работа. Это только ты любишь байты туда-сюда поперекладывать с нулевым полезным результатом. Это, может, и прикольно, да вот только полезного выхлопа ноль.
- Никакого хттп, вебчика и прочего нет.
- Обработку 10к сокетов я выкачу.
- Ой-ой. Ты планировал десять тысяч раз вызвать socket()? Мда... Хотя давай, выкатывай. Поржём.
- i-rinat ★★★★★ (04.07.2017 2:04:25)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 04.07.2017 2:04:07
- Смысл с10к, как и один коннект==1тред основана на ИО, а именно блокирующей природе рид/врайтов. Именно поэтому там и взялись треды.
- Если ты не в состоянии на примитивном уровне реализовать HTTP, ты просто ноль. На самом деле, это условие облегчает тебе работу, так как для тестов можно переиспользовать уже существующие инструменты.
- Если хочешь, пиши просто на read/write. Но тогда тест-клиент и бекенд тоже реализуешь ты.
- Сокеты - есть ущербанское, убогое и мусорное api.
- Вот ты ещё соломки подстелил. Да, проблема в подходе есть. Только вот она возникает при переходе от миллиона к десяти миллионам. Не пытайся прикрыться этим при обработке 10k потоков.
- i-rinat ★★★★★ (04.07.2017 2:10:58)
- Последнее исправление: i-rinat 04.07.2017 2:14:21 (всего исправлений: 1)
- Сообщение удалено Pinkbyte по причине 4.3 Провокация flame (-2)
- Ответ на: комментарий от i-rinat 04.07.2017 2:04:25
- Запаковывайте балаболку - она сломалась.
- Я тебе сказал, ты либо опровергай википедию и иди её править, либо вылетай из треда. Всё просто.
- Полезная работа - это чтение данных из сокета.
- saifuluk (04.07.2017 2:14:10)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 04.07.2017 2:14:10
- Где код? Где тесты?
- i-rinat ★★★★★ (04.07.2017 2:14:37)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 04.07.2017 2:14:10
- Держите меня семеро!
- FTFY
- i-rinat ★★★★★ (04.07.2017 2:15:48)
- Сообщение удалено Pinkbyte по причине 4.3 Провокация flame (-2)
- Ответ на: комментарий от i-rinat 04.07.2017 2:10:58
- Если ты не в состоянии на примитивном уровне реализовать HTTP, ты просто ноль. На самом деле, это условие облегчает тебе работу, так как для тестов можно переиспользовать уже существующие инструменты.
- Это так мило, когда меня тыкают убогими хелвордами, которые даже на лабу не тянут.
- Если хочешь, пиши просто на read/write. Но тогда тест-клиент и бекенд тоже реализуешь ты.
- Я напишу просто ххтп-хелворд в ответ.
- Мне не особо интересны разговоры с вами, трата на это время. Ну пока собирается можно и на лоре пописать. Я вот всё надеюсь, что вы осилите начинать понимать, а не ретранслировать херню из интернета.
- Я выше доказал, что линукс спокойно может шедулить 10к тредов. Ты думаешь он не сможет вызвать врайт в этих 10к тредах? Сомневаюсь.
- Этого уже достаточно для любого вменяемого человек( не балабола). Но я иду на твои убогие условия и всё ради чего? Оно мне надо.
- И ты продолжаешь мне пастить и пастить всякий бред. Зачем?
- saifuluk (04.07.2017 2:22:47)
- Сообщение удалено Pinkbyte по причине Блокировка пользователя с удалением сообщений (0)
- Ответ на: комментарий от i-rinat 04.07.2017 2:14:37
- Я сказал уже, что тесты я тебе дам. Дам их тогда, когда мне будет не лень этим заниматься. У меня много и других дел. Мои дела для меня намного интересней и профитнее, вернее доказательство тебе что-то мне не интересно и никакого профита не даёт.
- Я в процессе переваривания «новой» для меня архитектуры - я люблю в это время посраться на форуме. Тут тупняк и расслабуха. Может когда-то в споре с вами понадобится напрягать хоть одну извилину, но то мечты.
- Постараюсь до утра выкатить.
- saifuluk (04.07.2017 2:28:07)
- Сообщение удалено Pinkbyte по причине 4.3 Провокация flame (-2)
- Ответ на: комментарий от i-rinat 04.07.2017 2:15:48
- Починился? Ты дейтвительно не понимаешь уровня всего того маразма, что ты мне тут выкатываешь? Как ты юлишь, как ты пытаешься со мною играть и меня дурить.
- Эти глупые манипуляции, смены темы по 20раз. Игнорирования всего и вся. Куда я бы не зашел - у вас у всех повадки идентичны.
- Фу на вас. Не беспокойся. Будут тебе твои 10к. Я же тебе в прошлый раз обещал самый быстрый поиск - когда-нибудь он будет. Самый быстрый. Но пока средства те, которые ему позволят существовать находятся в разработке.
- saifuluk (04.07.2017 2:36:03)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 04.07.2017 2:36:03
- Я же тебе в прошлый раз обещал самый быстрый поиск - когда-нибудь он будет. Самый быстрый.
- Ага, как же. Или это у тебя такое правило — если не забывать говорить «щас-щас», это не считается за «слился»?
- Куда я бы не зашел - у вас у всех повадки идентичны.
- Никто в твою гениальность не верит на слово? Все требуют каких-то доказательств? Глупцы, да и только.
- Как ты юлишь
- Юлишь тут ты. Попросил чёткие условия — я дал тебе чёткие условия. Так ты сразу начал задачу менять. Мол, это не буду решать, буду другое решать.
- i-rinat ★★★★★ (04.07.2017 2:47:54)
- Сообщение удалено Pinkbyte по причине 7.1 Ответ на некорректное сообщение (авто) (0)
- Ответ на: комментарий от saifuluk 04.07.2017 2:22:47
- Это так мило, когда меня тыкают убогими хелвордами, которые даже на лабу не тянут.
- Тебя не тыкают, тебе протягивают спасательный круг. А ты, беспомощно барахтаясь за бортом, изо всех сил кричишь, что это тонут те, кто на судне. Кричишь, что бывают баржи водоизмещением в десятки тысяч тонн и как они это судно за пояс заткнут.
- Это не мило. Это грустно. Когда же ты поймёшь.
- i-rinat ★★★★★ (04.07.2017 2:53:04)
- Сообщение удалено Pinkbyte по причине Блокировка пользователя с удалением сообщений (0)
- Ответ на: комментарий от i-rinat 04.07.2017 2:47:54
- Попросил чёткие условия — я дал тебе чёткие условия.
- Ах да, чем ты собрался мерить свои «чёткие условия»?
- saifuluk (04.07.2017 5:06:58)
- ← Гарантированно асинхронная запись в Linux?
- Development
- Срочно требуется Мейнтейнер deb-based дистрибутива Linux (за хорошую оплату). →
- Похожие темы
- Новости Julia 0.5 (2016)
- Новости Julia 0.4 (2015)
- Форум Текущий статус языка Julia (2014)
- Форум Кто-нибудь пробовал Julia? (2014)
- Форум Julia Studio теперь Open Source (2013)
- Форум Потоки (2014)
- Форум Потоки (2016)
- Новости The Julia Language — ещё один ЯП? (2012)
- Форум Julia, можно ли получить бинарник и/или so? (2015)
- Форум Синхронизация потоков с помощью семафоров (2013)
- О Сервере - Правила форума - Правила разметки
- https://www.linux.org.ru/
Add Comment
Please, Sign In to add comment