реклама на сайте
подробности

 
 
> Система, управляемая событиями и SST(super-simple tasker), Выделено из "ООП. Классы и динамические объекты"
brag
сообщение Sep 7 2016, 09:07
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 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-ами(с ихними стеками - куча кода было написано для анализа программ на предмет нужного обьема стека, и теперь эта куча кода отправлена на мусорку) со всеми этими тяжеленными мютексами, семафорами, вечными циклами как страшный сон.

Если кому интересно - расскажу и покажу как это все работает.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sigmaN
сообщение Sep 8 2016, 09:33
Сообщение #2


I WANT TO BELIEVE
******

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



Цитата
Вы все равно ничего не поняли. Ключевое слово Wait - оно у вас в голове и у меня тоже было, и очень трудно его было оттуда выбросить.

Могу в аналогичном тоне заявить, что наверно вы тоже ничего не поняли и у вас в голове On. Чтобы кто-то вызвал этот On должен быть где-то и Wait и цикл бесконечный.
Например в эмбэддэд с этим проще, потому что этот вэйт реализуется логикой отвечающей за генерацию прерывания по изменению уровня пина(например). И вы потом гордо залетаете в прерывание, оттуда вызываете свой On и радуетесь. Но кто-то до этого аппаратно делал Wait )

Даже в SST таки есть бесконечный цикл, который крутится и вызывает нужные On взависимости от ивэнтов в очереди.
Чем это отличается от WaitForMultipleObjects() для сокетов? Я не знаю. Наверно ни чем)
Но делая этот системный вызов я отдаю ресурсы другим потокам в ОС(ох уж эти потоки опять а!). Хотя таки да, мог бы крутить цикл и проверять сокеты вручную, потом ложить ивэнт в очередь а потом вызывать On И как глубоко бы вы не зкапывали этот цикл или вэйт он всё равно где-то есть.

Если вы в JS подписываетесь на какое-то событие, чтобы движок дёргал ваш On - это всего-лишь означает что нужный Wait и цикл скрыты где-то далеко.
Так что не шибко то разгоняйтесь с перестраиванием мозга на On.

Надеюсь вы таки поняли о чем я говорю ) Потому что хоть вы в это и не верите, а большинство и с принципами работы SST тут разобрались и про On знают не по наслышке тоже давно )

Цитата
Сервер будет отдавать запрошенный пользователем файл - устроит? Тестить будете?
В математику давайте пока лесть не будем, об этом позже и там тоже все довольно интересно и тоже все отлично ложится на SST-модель. Просто Javascript не предназначен для сложных вычислений, для этого есть другие инструменты, которые свободно работают в паре с JS.
Файл объемом 1Гб, скорость сети каждого клиента ограничиваем шейпером на роутере до....1мегабита ) Ну, чтоб точно заметно было как остальные клиенты сервера курят бамбук )
Не тратьте силы и так всё ясно же. Застрянет ваш сервер на одном клиенте и пока тот файл не скачает - всё это весело встанет колом.

Ааа, нет! Я придумал! В системе появится таймер, он будет генерировать событие onTimer, в этом событии вы будете проходиться по массиву с сокетами и каждому отправлять там по пару байт данных. Обходя сокеты по кругу. А потом скажите ну вот, все качают и никаких вэйтов ))))))))))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
brag
сообщение Sep 8 2016, 09:45
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата(sigmaN @ Sep 8 2016, 12:33) *
Могу в аналогичном тоне заявить, что наверно вы тоже ничего не поняли и у вас в голове On.

Это верно. Я выбросил из головы Wait и вдул туда On.

Цитата(sigmaN @ Sep 8 2016, 12:33) *
Чтобы кто-то вызвал этот On должен быть где-то и Wait и цикл бесконечный.
Например в эмбэддэд с этим проще, потому что этот вэйт реализуется логикой отвечающей за генерацию прерывания по изменению уровня пина(например). И вы потом гордо залетаете в прерывание, оттуда вызываете свой On и радуетесь. Но кто-то до этого аппаратно делал Wait )
Даже в SST таки есть бесконечный цикл, который крутится и вызывает нужные On взависимости от ивэнтов в очереди.

Нет, в этом нет необходимости. Хотя физически, как Вы подметили один такой цикл вполне может быть, это обусловлено самой архитектурой конкретного процессора. Но он пустой, кроме как инструкции sleep там больше ничего нет.


Цитата(sigmaN @ Sep 8 2016, 12:33) *
Чем это отличается от WaitForMultipleObjects() для сокетов? Я не знаю. Наверно ни чем)

А тут Вы уже не правы. WaitForMultipleObjects блокирует пользовательский поток. Все, поток мертвый. В то время, как в SST или яваскрипте в принципе нет такой возможности

Цитата
Но делая этот системный вызов я отдаю ресурсы другим потокам в ОС(ох уж эти потоки опять а!). Хотя таки да, мог бы крутить цикл и проверять сокеты вручную, потом ложить ивэнт в очередь а потом вызывать On И как глубоко бы вы не зкапывали этот цикл или вэйт он всё равно где-то есть.
Если вы в JS подписываетесь на какое-то событие, чтобы движок дёргал ваш On - это всего-лишь означает что нужный Wait и цикл скрыты где-то далеко.
Так что не шибко то разгоняйтесь с перестраиванием мозга на On.

Ну пусть себе будет этот цикл где-то один единственный, зачем программисту о нем думать? Хотя физически его может и не быть или он будет абсолютно пустой, но дело не в этом.
Вы, например, когда пишете код на С думаете, какой при этом байт-код получается? Какие инструкции при этом генерит компилятор, какие регистры использует?


Цитата(DASM @ Sep 8 2016, 12:39) *
а не в безопастности ли выполнения коренное различие? в системе с различными стеками потоков проще убить взбунотовавщийся поток, он в теории не нарушит работу других.

Для безопасности есть MPU/MMU, если оно действительно нужно - тогда запросто берем и используем.

Цитата
Файл объемом 1Гб, скорость сети каждого клиента ограничиваем шейпером на роутере до....1мегабита ) Ну, чтоб точно заметно было как остальные клиенты сервера курят бамбук )
Не тратьте силы и так всё ясно же. Застрянет ваш сервер на одном клиенте и пока тот файл не скачает - всё это весело встанет колом.

Идет. Будете тестить? Файлик сами приготовите любой. Только боюсь, в этом случаи мы не SST-модель будем тестить, а Ваш жесткий диск или Ваш порезанный канал. Но как только Вы подсунете нормальный файл на несколько КБ-МБ и сделаете канал, достаточный для закрузки сервака на полную - все станет совсем иначе.
Хотя даже с гиговым файлом/файлами однопоточный javascript покажет выше производительность, чем классический многопоточный C. Проверим?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - 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
- - sigmaN   Как весело мы ушли в сторону от обсуждения планиро...   Sep 8 2016, 20:43
- - 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 страниц V   1 2 3 >


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 07:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.0159 секунд с 7
ELECTRONIX ©2004-2016