|
Система, управляемая событиями и SST(super-simple tasker), Выделено из "ООП. Классы и динамические объекты" |
|
|
|
Sep 7 2016, 09:07
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Недавно я начал пользоваться динамической памятью. Раньше пользовался только статикой, то есть placement new. Со статикой сложно работать с такими шаблонами, как фабрика обьектов, временные задачи итд. Программирую в основном под cortex-m3/m4 Код реализации аллокатора вышел довольно простым и быстрым, критически секции есть, но очень короткие(там прочитать/записать пару байт). При чем я не использую этих всяких монстров под названием RTOS, у меня свой простейший асинхронный планировщик задач, занимает строк 300 кода с комментариями(погуглите запрос "super simple tasker", поймете что это). В купе с динамическим аллокатором, variable element-size queue, новыми фишками C++ (шаблоны, лямбда-функции, auto) получается очень простой, безопасный и мощный фреймворк. Вспоминаю работу с классическими Thread-ами(с ихними стеками - куча кода было написано для анализа программ на предмет нужного обьема стека, и теперь эта куча кода отправлена на мусорку) со всеми этими тяжеленными мютексами, семафорами, вечными циклами как страшный сон.
Если кому интересно - расскажу и покажу как это все работает.
|
|
|
|
|
 |
Ответов
|
Sep 8 2016, 20:43
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Как весело мы ушли в сторону от обсуждения планировщика задач в эмбэддэд к тестированию вэб серверов под линуксом и вендой. Не могу сказать что это приавльно, но прикольно ) Очень жаль, что всё законичлось применением готового Node.js и обработкой пары собитий on, которые как вообще там появляются не ясно и вникать вы видимо не хотите. Надеялся увидеть как вы с SST будете изобретать велосипед и отдавать клиентам данные порциями, чтобы хоть как-то обслуживать их всех параллельно. Я уже говорил о том, что ваша программа(или движок V8 в случае с JS) это для опереционной системы задача(процесс/поток не так уж важно в данном случае). Получает эта задача процессорное время квантами ибо в ОС встроен нормальный планировщик а не SST. Ядру ОС планировщик тоже дает процессорное время. Теми-же квантами. В ядре вертятся сокеты, обработка пакетов сетевухи и т.д. ОК? Это понятно? Далее, используя API ядра(асинхронный ввод/вывод) на уже готовой операционной системе вы по сути просто делегируете генерацию событий связанных с сокетом ядру. Ядро там в нужное место записывает ваши пожелания и выполняет их, когда кванты времени планировщик выдаст. Там всё мясо, там всё веселье то происходит. Собственно с обсуждения именно этого веселья мы с вами начали. И я уже пытался обратить на это внимание, но вы сказали, что вам это не важно, потом выкатили Node.JS где это действительно не важно. Круто, что я могу сказать) Как жаль, что немного не в тему. Вы заявили, что в чудо сервере будет один поток и один стек, а на самом деле запустили задачу под нормально ОС, где ядро и планировщик задач раскидал всё за вас и раздал всем события, на которые вы гордо в одном потоке отреагировали. Ну право же, от изначальной темы беседы мы ушли так далеко, как только было возможно. Вы же понимаете, что итоговый путь от пакета на сетевухе до вашего события On был пройден через несколько стеков и переключений контекстов(полных переключений, не куцых SSTшных). И я не хочу сказать, что на SST вы в принципе не сделаете такой сервер. Сделаете. Кактусов покушав немного ) В итоге лично я могу сказать только то, что вы меня удивили как этот JS шевелится. Чуваки работающие над движком V8 однозначно знают своё дело! И таки да, еще можно добавить, что для однотипных задач(обслуживание клиентов сервером это однотипная для каждого клиента задача) не стоит создавать поток. Тем не менее это не отменяет необходимости нормального переключения задач вместо SST, где задачи приходится костылить до состояния зашел-вышел! Уже не один человек высказал мнение, что SST это не так круто как вам кажется и имеет кучу ограничений и проблем. Однако вы по прежнему упрямствуете и, как вы сами выразились, вдуваете себе в голову On
--------------------
The truth is out there...
|
|
|
|
Сообщений в этой теме
brag Система, управляемая событиями и SST(super-simple tasker) Sep 7 2016, 09:07 sigmaN Ну так извините меня, классические, как вы говорит... Sep 7 2016, 10:07 Serhiy_UA Цитата(brag @ Sep 7 2016, 12:07) Не очень... Sep 7 2016, 10:24 brag ЦитатаНапример если у вас хотя-бы одна из задач бу... Sep 7 2016, 11:56 Serhiy_UA brag, Спасибо за пояснения! Sep 7 2016, 12:16 arhiv6 Цитата(brag)Если кому интересно - расскажу и покаж... Sep 7 2016, 12:18 AHTOXA Цитата(brag @ Sep 7 2016, 14:07) Если ком... Sep 7 2016, 12:17 Kabdim Цитата(brag @ Sep 7 2016, 12:07) Если ком... Sep 7 2016, 12:36 brag ЦитатаПрисоединюсь к интересующимся. Если я правил... Sep 7 2016, 12:47 AlexandrY Цитата(brag @ Sep 7 2016, 15:47) Я конечн... Sep 7 2016, 13:48 brag ЦитатаВытесняющая асинхронная многозадачность сейч... Sep 7 2016, 13:57 sigmaN Очень интересно. Видимо этот SST прошел мимо меня.... Sep 7 2016, 15:50 brag Все, что мы теряем отказываясь от классических тре... Sep 7 2016, 16:20 DASM Что то не пойму, речь о кооперативной "оси... Sep 7 2016, 16:43 sigmaN Никто же не мешает организовать обмен ивентами и в... Sep 7 2016, 17:04 brag ЦитатаЧто то не пойму, речь о кооперативной ... Sep 7 2016, 17:14 sigmaN Наврено правильно сравнивать реализацию вещей обес... Sep 7 2016, 18:37 arhiv6 Цитата(DASM)Что то не пойму, речь о кооперативной ... Sep 7 2016, 19:01 DASM Спасибо, интересно, почитал. Sep 7 2016, 19:37 brag ЦитатаВ то время как в классической модели я могу ... Sep 7 2016, 20:04 DASM Ну я бы не стал столь восторженно писать, не могут... Sep 7 2016, 20:43 brag Цитата(DASM @ Sep 7 2016, 23:43) Ну я бы ... Sep 7 2016, 21:32 sigmaN ЦитатаДа и PC мир уже давно переходит на event-ы..... Sep 8 2016, 00:18 DASM а что такое "императивный код"? https://... Sep 8 2016, 00:52 arhiv6 Императивное программирование Sep 8 2016, 02:23 DASM "В этом случае программа представляет собой ф... Sep 8 2016, 02:37 ViKo Допустим, надо стереть flash-память, что длится д... Sep 8 2016, 04:35 sigmaN Ну почему же обязательно создавать задачу. Стирани... Sep 8 2016, 07:03 ViKo Ветвление, это что? После стирания нужно дальше р... Sep 8 2016, 07:17 brag ЦитатаНу давайте не будем путать всё в кучу. Это р... Sep 8 2016, 07:27 sigmaN ЦитатаНет, физически там один поток и один стек. Х... Sep 8 2016, 07:31 brag Цитата(sigmaN @ Sep 8 2016, 10:31) Хотело... Sep 8 2016, 07:38 ViKo Слезть с шины, и что делать? Висеть в задаче без ... Sep 8 2016, 07:39 brag Цитата(ViKo @ Sep 8 2016, 10:39) Слезть с... Sep 8 2016, 08:16 501-q Приветствую!
Модель SST хорошо работает до то... Sep 8 2016, 07:55 sigmaN ЦитатаКонечо. При чем написанного на языке Javascr... Sep 8 2016, 08:19 brag ЦитатаПриветствую!
Модель SST хорошо работает... Sep 8 2016, 08:25 sigmaN Прям с удовольствием потестирую )))))
Особенно со... Sep 8 2016, 08:33 DASM На самом деле мы наверное действительно отстали от... Sep 8 2016, 08:37 brag ЦитатаВсе же Javascript для эмбеддед старого добро... Sep 8 2016, 08:45 arhiv6 brag, на сколько я понял, в обычном SST пока задач... Sep 8 2016, 08:47 brag ЦитатаНу как бы с идеей SST крутится всякая мелкая... Sep 8 2016, 08:48 sigmaN Ладно бы товарищ просто говорил что ребят, так про... Sep 8 2016, 08:54 AHTOXA Цитата(sigmaN @ Sep 8 2016, 13:54) Но у н... Sep 8 2016, 09:04 brag Цитатаbrag, на сколько я понял, в обычном SST пока... Sep 8 2016, 09:11 sigmaN ЦитатаПоэтому и в сях сейчас развивают асинхронное... Sep 8 2016, 09:16 brag ЦитатаЭто когда куча сокетов в массиве а потом в ц... Sep 8 2016, 09:22 sigmaN ЦитатаВы все равно ничего не поняли. Ключевое слов... Sep 8 2016, 09:33 brag Цитата(sigmaN @ Sep 8 2016, 12:33) Могу в... Sep 8 2016, 09:45  DASM Цитата(brag @ Sep 8 2016, 12:45) Для безо... Sep 8 2016, 09:49   brag Цитата(DASM @ Sep 8 2016, 12:49) В случае... Sep 8 2016, 09:58 DASM а не в безопастности ли выполнения коренное различ... Sep 8 2016, 09:39 sigmaN ЦитатаWaitForMultipleObjects блокирует пользовател... Sep 8 2016, 09:53 sigmaN ЦитатаХотя даже с гиговым файлом/файлами однопоточ... Sep 8 2016, 09:58 brag ЦитатаНу во-первых там есть таймаут. Так что поток... Sep 8 2016, 10:13 arhiv6 brag, спасибо за ответ. Но всё-равно не всё понятн... Sep 8 2016, 10:14 brag arhiv6 , Вы путаете задачу и обработчик события. Э... Sep 8 2016, 10:26 arhiv6 brag, спасибо большое за разъяснение, теперь всё п... Sep 8 2016, 10:52  brag Цитата(arhiv6 @ Sep 8 2016, 13:52) [/b]br... Sep 8 2016, 10:57 sigmaN ЦитатаНу как оно физически, да еще и под виндой я ... Sep 8 2016, 10:34 brag ЦитатаВот тут то мы и начинаем докапываться до сут... Sep 8 2016, 10:47 sigmaN Лаадно, тогда вы проводите правильный тест, выклад... Sep 8 2016, 11:34 brag Еще огромное преимущество SST-модели в том, что та... Sep 8 2016, 11:40 AlexandrY Цитата(brag @ Sep 8 2016, 14:40) Ок, дела... Sep 8 2016, 12:39 sigmaN Вы видимо думаете, что мы тут все совсем темные, д... Sep 8 2016, 12:34 brag ЦитатаВ MQX есть в том числе и ваша гениальная иде... Sep 8 2016, 12:42 AlexandrY Цитата(brag @ Sep 8 2016, 15:42) SST - эт... Sep 8 2016, 13:03  brag Цитата(AlexandrY @ Sep 8 2016, 16:03) SST... Sep 8 2016, 15:18 Kabdim А топик так хорошо начинался. Тоже что ли залезт... Sep 8 2016, 12:51 brag Хух, сишный клиент осилил. То segfault схлопнешь, ... Sep 8 2016, 17:22 psL Цитата(brag @ Sep 8 2016, 20:22) 1000 пот... Sep 9 2016, 20:59 sigmaN Интересный способ проверить сколько потоков может ... Sep 8 2016, 17:44 brag ЦитатаА мы уверены, что все клиенты параллельно ка... Sep 8 2016, 19:21 Herz Поступило предложение тему разделить и основное об... Sep 8 2016, 19:38 AHTOXA Цитата(Herz @ Sep 9 2016, 00:38) Поступил... Sep 8 2016, 21:03 Serhiy_UA Цитата(Herz @ Sep 8 2016, 22:38) Поступил... Sep 9 2016, 04:53 brag Возражений нет, но я не автор. Про аллокатор у мен... Sep 8 2016, 20:04 brag NodeJS свободно может работать без ОС и потоков во... Sep 8 2016, 21:10 shreck 2brag
В приведенном вами коде проскакивает
Кодdel... Sep 9 2016, 02:16 brag ЦитатаХотя интересно было узнать то, что помимо ст... Sep 9 2016, 06:12 Serhiy_UA Цитата(brag @ Sep 9 2016, 09:12) dew/dele... Sep 9 2016, 07:23  brag ЦитатаОчень бы хотелось увидеть как бы вы обслужив... Sep 9 2016, 07:47 sigmaN Очень бы хотелось увидеть как бы вы обслуживали мн... Sep 9 2016, 07:36 sigmaN Всё всё, хватит, мы уже поняли что на Node.js можн... Sep 9 2016, 07:52 alexunder Цитата(sigmaN @ Sep 9 2016, 09:52) Всё вс... Sep 9 2016, 07:57  brag Цитата(alexunder @ Sep 9 2016, 10:57) Вер... Sep 9 2016, 08:00   alexunder Цитата(brag @ Sep 9 2016, 10:00) Естестве... Sep 9 2016, 08:16 brag Так я уже показал, как я работаю с Датафлеш. Приве... Sep 9 2016, 07:57 brag Сделал сервер сишный блокирующий многопоточний. Ка... Sep 9 2016, 08:26 Сергей Борщ Почерпнул много интересного из этого обсуждения. П... Sep 9 2016, 09:36 brag Сергей Борщ, это называется Partial Template Speci... Sep 9 2016, 09:58 sigmaN Да, я тоже могу сказать, что узнал что-то новое из... Sep 9 2016, 10:42 brag ЦитатаДля начала давайте определимся, что любой об... Sep 9 2016, 11:55 sigmaN Кстати справедливости ради надо добавить, что идея... Sep 9 2016, 19:24 brag Smalltalk прикольная штука, но не прижилась. Но та... Sep 9 2016, 20:04 sigmaN Цитатавсе - вы программируете асинхронно, пора вык... Sep 9 2016, 20:21 brag Ок, с фанатичностью убавим
Мне тоже лень было, но... Sep 9 2016, 20:51 sigmaN ЦитатаВидимо гуру не знает, что "Сервак на No... Sep 9 2016, 22:16 brag ЦитатаКаждый поток в линукс создается со стеком ~8... Sep 10 2016, 05:21
3 страниц
1 2 3 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|