<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: SearchItems - потокобезопасная итерация]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме SearchItems - потокобезопасная итерация форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Mon, 06 Apr 2026 17:08:31 +0300</pubDate>
		<item>
			<title>SearchItems - потокобезопасная итерация</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39346/topic4593/">SearchItems - потокобезопасная итерация</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Решил задачу поддержанием в памяти начального индекса, с которого производится поиск (вместо 0). По ходу торгов индекс постоянно увеличивается и большую часть снятых заявкок искать не нужно. <br />
			<i>18.08.2019 19:27:49, rodionos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39346/topic4593/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39346/topic4593/</guid>
			<pubDate>Sun, 18 Aug 2019 19:27:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>SearchItems - потокобезопасная итерация</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38534/topic4593/">SearchItems - потокобезопасная итерация</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Разницы во времени выполнения работу функции не наблюдаю. Попробовал следующие:<br /><br />1) Отключить фильтр Отмененные<br />2) Убрать цветовую кодировку<br />3) Минимизировать кол-во колонок<br />4) Убрать таблицу из интерфейса<br /><br /><br />Измеряю в виде расчеты дельты между датами sysdate.<br /><br />Правильно я догадываюсь, что таблицы в интерфейсе могут как-то влиять на скорость выполнения функции SearchItems? <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=5972&" width="596" height="565" /><br /><i>24.06.2019 18:25:30, rodionos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38534/topic4593/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38534/topic4593/</guid>
			<pubDate>Mon, 24 Jun 2019 18:25:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>SearchItems - потокобезопасная итерация</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38525/topic4593/">SearchItems - потокобезопасная итерация</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Попробуйте выполнять поиск активных заявок в таблице, в которой отфильтрованы данные по снятым заявкам.<br />Как уже ранее оговаривалось, отфильтровать таблицу необходимо убрав галку &quot;Снятые&quot; в настройках таблицы.<br />После сообщите о результате, пожалуйста. <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=5970&" width="1106" height="662" /><br /><i>24.06.2019 10:09:22, Alexander Kopyatkevich.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38525/topic4593/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38525/topic4593/</guid>
			<pubDate>Mon, 24 Jun 2019 10:09:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>SearchItems - потокобезопасная итерация</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38522/topic4593/">SearchItems - потокобезопасная итерация</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<ul><li>На данный момент я использую только таблицы orders и depo_limits.<br /><li>Большое кол-во строк только в таблице orders.<br /><li>Замена заявки производится программно путем отправки транзакции KILL с последующим NEW_ORDER<br /></ul>Поиск активных заявок в таблице размером 26000 (практически все неактивные) занимает около 75 мс, хотелось бы сократить. <br />
			<i>24.06.2019 09:55:56, rodionos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38522/topic4593/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38522/topic4593/</guid>
			<pubDate>Mon, 24 Jun 2019 09:55:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>SearchItems - потокобезопасная итерация</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38521/topic4593/">SearchItems - потокобезопасная итерация</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте.<br />====quote====<br />1) Необходима ли повторная проверка или можно полагаться, что а) строки &nbsp;не удаляются, &nbsp;б) новые заявки помещаются в конец таблицы и в) порядок &nbsp;строк не меняется в течение торгового дня? Если так, применима ли такая &nbsp;модель ко всем таблицам в Quik (строки никогда не удаляются, новые &nbsp;добавляются в конец, порядок строк зафиксирован).<br /><br />=============<br />Произвольно строки из таблицы заявок не удаляются, не перемешиваются между собой в произвольном порядке и так далее. Поэтому, проверку можно не применять.<br />Касательно применения модели ко всем таблицам - тут нужно уточнить о каких таблицах идет речь и какая задача стоит. Большинство таблиц в терминале настраиваются пользователем, но правило построения (строки не перемешиваются, не удаляются и так далее) ко всем одинаковое.<br />====quote====<br />2) По ходу биржевого дня количество строк в таблице постоянно &nbsp;увеличивается и доходит до 20000, в результате постоянного изменения &nbsp;лимитных заявок по цене (снять старую, выставить новую по другой цене). &nbsp;При этом активных заявок только несколько сотен. При каком размере &nbsp;таблицы имеет смысл задуматься о производительности функции &nbsp;find_active_orders и как ее можно было ускорить для случая когда &nbsp;практически все заявки неактивные?<br />=============<br />Уточните, пожалуйста, снятие лимитной заявки и выставление новой так же происходит с помощью робота или же вручную? Большая часть строк заявок из таблицы можно убрать через редактор настроек таблицы (убрать галочку &quot;Снятые&quot;). <br />
			<i>24.06.2019 07:06:06, Alexander Kopyatkevich.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38521/topic4593/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38521/topic4593/</guid>
			<pubDate>Mon, 24 Jun 2019 07:06:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>SearchItems - потокобезопасная итерация</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38516/topic4593/">SearchItems - потокобезопасная итерация</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Я пользуюсь нижеприведенным вариантом для получения подвыборки строк из таблицы, в данном примере из таблицы orders.<br />
====code====
<pre>function find_active_orders(class_code, sec_code)

&nbsp;&nbsp;&nbsp;&nbsp;function matchItem(_flags, _class_code, _sec_code)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return bit.band(_flags, 0x1) ~= 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and _class_code == class_code
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and _sec_code == sec_code
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;local indexes = SearchItems("orders", 0, getNumberOf("orders")-1, matchItem, "flags,class_code,sec_code")
&nbsp;&nbsp;&nbsp;&nbsp;if indexes == nil then return {} end
&nbsp;&nbsp;&nbsp;&nbsp;local res = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i=1, #indexes do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local item = getItem("orders", indexes&#91;i&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if matchItem(item.flags, item.class_code, item.sec_code) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&#91;#res+1&#93; = item
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return res
end</pre>
=============
<br />В строке <span class="bx-font" style="font-family:monospace">if matchItem(item.flags, item.class_code, item.sec_code)</span> then я дополнительно проверяю, что полученная заявка соответствует изначальному фильтру на случай, если таблица orders будет изменена и в нее будут добавлены новые заявки в произвольном порядке.<br /><br />Два вопроса:<br /><br />1) Необходима ли повторная проверка или можно полагаться, что а) строки не удаляются, &nbsp;б) новые заявки помещаются в конец таблицы и в) порядок строк не меняется в течение торгового дня? Если так, применима ли такая модель ко всем таблицам в Quik (строки никогда не удаляются, новые добавляются в конец, порядок строк зафиксирован).<br /><br />2) По ходу биржевого дня количество строк в таблице постоянно увеличивается и доходит до 20000, в результате постоянного изменения лимитных заявок по цене (снять старую, выставить новую по другой цене). При этом активных заявок только несколько сотен. При каком размере таблицы имеет смысл задуматься о производительности функции find_active_orders и как ее можно было ускорить для случая когда практически все заявки неактивные? <br />
			<i>23.06.2019 13:55:49, rodionos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38516/topic4593/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38516/topic4593/</guid>
			<pubDate>Sun, 23 Jun 2019 13:55:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
