table.s*

Страницы: 1
RSS
table.s*
 
Добрый день.

Господа разработчики. Я правильно понимаю, что в функциях table.s* семафоры/состояние проверяется с частотой 10 раз в секунду или мне это только кажется?

Спасибо.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Здравствуйте,
Просьба рассказать подробнее, как Вы пришли к такому выводу?
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Просьба рассказать подробнее, как Вы пришли к такому выводу?

напишите себе тест: из одного потока забиваем таблицу миллионом цифр посредством sinsert. из другого потока удаляем по одному элементу посредством sremove. ну и попробуйте дождаться окончания процесса.

по результатам оторвите руки написавшему эти функции и ноги тому, кто рекомендовал их использовать для обмена данными между потоками терминала и скрипта.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
понятие семафоров и времени, как такого - не применимы в данном контексте и уж тем более неприменимо понятие времени в системах с вытесняющей многозадачностью. На вашей машине - это 10 раз в секунду, на другой - другие значения.
Насчёт того, кто писал и рекоммендовал - это один и тот же человек))) Что ж он тогда без рук и ног делать-то будет?)))
Насчёт написания теста: Вы приведите свой тест, а мы и проверим у кого, что выйдет))
 
я дкмаю, в данном случае, это не из-за скорости работы критических секций, а из-за скорости переключения контекста потоков. В любом случае, хотелось бы видеть полный код скрипта с описанной проблемой, т.к. потоки в QLUA можно создавать по-разному.
 
Цитата
тот самый написал:
а мы и проверим у кого, что выйдет))
Будьте внимательнее. Я обращался к разработчикам.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Цитата
тот самый   написал:
а мы и проверим у кого, что выйдет))
Будьте внимательнее. Я обращался к разработчикам.
сомневаюсь, что они ВООБЩЕ Вам ответят на данный вопрос. Если Вы игнорируете пользователей то, спрашивается, - что Вы здесь забыли? Это именно то место - где каждый может задать вопрос каждому. Если Вас это не устраивает - Вы можете воспользоваться электронной почтой или личкой....
 
Добрый день.
Пришлите нам пример кода для тестов. Кроме того, если вставлять и удалять элементы с индексом 1, то мы получим линейную зависимость времени работы от размера таблицы.
 
Цитата
Michael Bulychev написал:
Добрый день.
Пришлите нам пример кода для тестов. Кроме того, если вставлять и удалять элементы с индексом 1, то мы получим линейную зависимость времени работы от размера таблицы.
Михаил.

Естественно что для обмена между потоком терминала и потоком скрипта нам требуется очередь FIFO. Поэтому при использовании table.s есть 2 варианта.
1. Добавлять данные в хвост таблицы (быстро) и удалять первое значение (медленно)
2. Добавлять в начало таблицы (медленно) и убирать  последнее значение (быстро)

Хрен редьки не слаще.

Теста у меня уже нет, удалил. писать там особо нечего  сначала в цикле добавляем через sinsert миллион строк, после чего в цикле удаляем первое значение по sremove.

на моем компьютере за секунду удалялось 10 значений (каждую секунду). я подождал минут 5 и понял, что ждать дальше смысла нет. Предположений два: либо размеряются какие-то временнЫе промежутки, равные 1/10 секунды, либо перелопачивание всего массива функцией sremove несет огромные расходы.

И в том и другом случае - на помойку. Заменил на собственную функцию с тем же интерфейсом - проблемы исчезли.

миллион значений - вполне нормальная ситуация из реальной задачи.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Синхронизация. конечно, скорости не добавляет, но в документации прямо написано :
Цитата
we can implement queues trivially using insert and remove (from the table library), this implementation can be too slow for large structures
Для ситуации один читатель/один писатель можно написать неблокирующую очередь.
 
Цитата
Michael Bulychev написал:
we can implement queues trivially using insert and remove (from the table library), this implementation can be too slow for large structures
а если использовать b-tree?
 
Сами по себе Lua-функция table.remove/table.insert тормозные, когда дело касается добавления/удаления в начале (середине) большой таблицы
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Michael Bulychev написал:
Цитата
Для ситуации один читатель/один писатель можно написать неблокирующую очередь
ее я и сляпал.

А применение функций table.s* становится бессмысленным в общем случае. Оно имеет  смысл только тогда, когда заранее известно, что объем обмена будет мизерный.

Пришлось перекомпилировать все актуальные скрипты, чтобы table.s* там не фигурировали.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
Страницы: 1
Читают тему
Наверх