RU2574833C2 - Multiflow data elements sorting in electronic tables - Google Patents
Multiflow data elements sorting in electronic tables Download PDFInfo
- Publication number
- RU2574833C2 RU2574833C2 RU2012145666/08A RU2012145666A RU2574833C2 RU 2574833 C2 RU2574833 C2 RU 2574833C2 RU 2012145666/08 A RU2012145666/08 A RU 2012145666/08A RU 2012145666 A RU2012145666 A RU 2012145666A RU 2574833 C2 RU2574833 C2 RU 2574833C2
- Authority
- RU
- Russia
- Prior art keywords
- block
- stream
- blocks
- result
- data elements
- Prior art date
Links
- 238000003780 insertion Methods 0.000 claims description 3
- 230000004044 response Effects 0.000 claims description 3
- 238000000034 method Methods 0.000 abstract description 35
- 230000000694 effects Effects 0.000 abstract description 2
- 239000000126 substance Substances 0.000 abstract 1
- 210000004027 cells Anatomy 0.000 description 39
- UIIMBOGNXHQVGW-UHFFFAOYSA-M buffer Substances [Na+].OC([O-])=O UIIMBOGNXHQVGW-UHFFFAOYSA-M 0.000 description 32
- 238000010586 diagram Methods 0.000 description 8
- 230000000875 corresponding Effects 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000003287 optical Effects 0.000 description 3
- 230000002618 waking Effects 0.000 description 3
- 239000003086 colorant Substances 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 210000002383 AT1 Anatomy 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006011 modification reaction Methods 0.000 description 1
- 230000000737 periodic Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000001360 synchronised Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Abstract
Description
ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИBACKGROUND OF THE INVENTION
[0001] Приложения электронных таблиц позволяют пользователям просматривать и манипулировать табличными данными. Например, приложение электронной таблицы может позволить пользователю просматривать и манипулировать электронной таблицей, содержащей строки для различных продуктов и колонки для различных магазинов-складов. В этом примере ячейки содержат значения, указывающие материальные запасы продуктов на складах. Во многих случаях пользователи хотят иметь возможность сортировать строки в электронных таблицах. Продолжая предыдущий пример, пользователь может хотеть сортировать строки в электронной таблице на основании того, сколько некоторый склад содержит каждого из продуктов. В других случаях пользователи хотят быть в состоянии сортировать колонки в электронных таблицах. Продолжая предыдущий пример, пользователь может хотеть сортировать колонки в электронной таблице на основании того, сколько конкретного продукта находится в каждом из складов.[0001] Spreadsheet applications allow users to view and manipulate tabular data. For example, a spreadsheet application may allow a user to view and manipulate a spreadsheet containing rows for various products and columns for various warehouse stores. In this example, cells contain values that indicate inventories of products in warehouses. In many cases, users want to be able to sort rows in spreadsheets. Continuing with the previous example, the user may want to sort the rows in the spreadsheet based on how much a particular warehouse contains for each product. In other cases, users want to be able to sort columns in spreadsheets. Continuing the previous example, the user may want to sort the columns in the spreadsheet based on how many specific products are in each warehouse.
[0002] В больших электронных таблицах процесс сортировки строк в электронной таблице может быть относительно медленным. Такие задержки обработки могут нарушить ход мыслей пользователя или препятствовать пользователю сортировать строки в электронной таблице. Следовательно, желательно сделать процесс сортировки строк в электронной таблице настолько быстрым, насколько это возможно.[0002] In large spreadsheets, the process of sorting rows in a spreadsheet can be relatively slow. Such processing delays can disrupt the user's thinking or prevent the user from sorting rows in a spreadsheet. Therefore, it is desirable to make the process of sorting rows in a spreadsheet as fast as possible.
СУЩНОСТЬ ИЗОБРЕТЕНИЯSUMMARY OF THE INVENTION
[0003] Процесс сортировки выполнен в электронной таблице. В процессе сортировки элементы данных в электронной таблице разделены на множество блоков. Множество потоков использованы для сортировки элементов данных в блоках. После того как элементы данных в блоках отсортированы, множество объединенных потоков используются для генерирования блока конечного результата. Блок конечного результата содержит каждый из элементов данных в электронной таблице. Каждый из объединенных потоков является потоком, который объединяет два исходных блока для генерирования блока результата. Каждый из исходных блоков является или одним из отсортированных блоков, или одним из блоков результата, сгенерированных другим одним из объединенных потоков. Отсортированная версия электронной таблицы затем отображается. Элементы данных в отсортированной версии электронной таблицы упорядочиваются в соответствии с порядком элементов данных в блоке конечного результата.[0003] The sorting process is performed in a spreadsheet. During the sorting process, the data elements in the spreadsheet are divided into many blocks. Many threads are used to sort data items in blocks. After the data elements in the blocks are sorted, many combined threads are used to generate the block of the final result. The end result block contains each of the data elements in the spreadsheet. Each of the combined threads is a thread that combines the two source blocks to generate a result block. Each of the source blocks is either one of the sorted blocks, or one of the result blocks generated by another one of the combined threads. The sorted version of the spreadsheet is then displayed. Data elements in a sorted version of a spreadsheet are ordered according to the order of data elements in the end result block.
[0004] Эта сущность изобретения предоставляется для ввода выбора понятий. Эти понятия дополнительно описаны ниже в подробном описании. Данная сущность изобретения не предназначена для идентификации ключевых особенностей или существенных признаков заявленного объекта изобретения, и при этом эта сущность изобретения не предназначена в качестве помощи в определении объема заявленного объекта изобретения.[0004] This summary is provided to introduce a selection of concepts. These concepts are further described below in the detailed description. This summary is not intended to identify key features or essential features of the claimed subject matter, nor is this summary intended to assist in determining the scope of the claimed subject matter.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙBRIEF DESCRIPTION OF THE DRAWINGS
[0005] Фиг. 1 является блок-схемой, иллюстрирующей пример вычислительной системы.[0005] FIG. 1 is a block diagram illustrating an example of a computing system.
[0006] Фиг. 2 является блок-схемой, иллюстрирующей примерный альтернативный вариант осуществления вычислительной системы.[0006] FIG. 2 is a block diagram illustrating an example alternative embodiment of a computing system.
[0007] Фиг. 3 является последовательностью операций, иллюстрирующей примерную работу для сортировки электронной таблицы.[0007] FIG. 3 is a flowchart illustrating an example operation for sorting a spreadsheet.
[0008] Фиг. 4 является диаграммой, показывающей примерное дерево потоков.[0008] FIG. 4 is a diagram showing an example flow tree.
[0009] Фиг. 5 является последовательностью операций, иллюстрирующей примерную операцию, выполняемую листовым потоком во время фазы объединения процесса сортировки.[0009] FIG. 5 is a flowchart illustrating an example operation performed by a sheet stream during a combining phase of a sorting process.
[0010] Фиг. 6 является последовательностью операций, иллюстрирующей примерную операцию, выполняемую неполным внутренним потоком.[0010] FIG. 6 is a flowchart illustrating an example operation performed by an incomplete internal thread.
[0011] Фиг. 7 является последовательностью операций, иллюстрирующей примерную операцию, выполняемую полным внутренним потоком.[0011] FIG. 7 is a flowchart illustrating an example operation performed by a full internal thread.
[0012] Фиг. 8 является последовательностью операций, иллюстрирующей примерную операцию, выполняемую потоком управления памятью во время фазы объединения процесса сортировки.[0012] FIG. 8 is a flowchart illustrating an example operation performed by a memory control stream during a combining phase of a sorting process.
[0013] Фиг. 9 является блок-схемой, иллюстрирующей примерное вычислительное устройство.[0013] FIG. 9 is a block diagram illustrating an example computing device.
ПОДРОБНОЕ ОПИСАНИЕDETAILED DESCRIPTION
[0014] Фиг. 1 является блок-схемой, иллюстрирующей примерную вычислительную систему 100. Вычислительная система 100 является системой, содержащей одно или более вычислительных устройств. Как используется в настоящем описании, вычислительное устройство является физическим материальным устройством, которое обрабатывает информацию. В различных вариантах осуществления вычислительная система 100 содержит различные типы вычислительных устройств. Например, вычислительная система 100 может содержать один или более настольных компьютеров, ноутбуков, нетбуков, карманных вычислительных устройств, смартфонов, автономных серверов, сверхкомпактных серверов, универсальных компьютеров, суперкомпьютеров и/или других типов вычислительных устройств. В вариантах осуществления, где вычислительная система 100 содержит более чем одно вычислительное устройство, вычислительные устройства в вычислительной системе 100 могут быть распределены по различным местоположениям и связываться с помощью системы связи, такой как Интернет или локальная сеть.[0014] FIG. 1 is a block diagram illustrating an
[0015] Как иллюстрировано в примере на фиг. 1, вычислительная система 100 содержит систему 102 хранения данных, систему 104 обработки и систему 106 отображения. Должно быть оценено, что в других вариантах осуществления вычислительная система 100 включает в себя больше или меньше компонентов, чем иллюстрированы в примере на фиг. 1. Кроме того, должно быть оценено, что фиг. 1 показывает вычислительную систему 100 в упрощенной форме для простоты понимания.[0015] As illustrated in the example of FIG. 1, the
[0016] Система 102 хранения данных является системой, содержащей один или более считываемых компьютером носителей данных. Считываемым компьютером носителем данных является физическое устройство или продукт изготовления, который способен хранить данные энергозависимым или энергонезависимым способом. В некоторых вариантах осуществления система 102 хранения данных содержит один или более считываемых компьютером носителей данных, которые являются непереносными. Примерные типы считываемых компьютером носителей данных включают в себя оперативное запоминающее устройство (RAM), постоянное запоминающее устройство (ROM), запоминающее устройство на оптических дисках (например, CD-ROM, DVD, диски BluRay, диски HDDVD и т.д.), на магнитных дисках (например, жесткие диски, дискеты и т.д.), устройства твердотельной памяти (например, устройства флэш-памяти), памяти EEPROM, программируемые пользователем вентильные матрицы и так далее. В некоторых вариантах осуществления, где система 102 хранения данных содержит более чем один считываемый компьютером носитель данных, считываемые компьютером носители данных распределяются по различным географическим местоположениям.[0016] The
[0017] Система 102 хранения данных хранит считываемые компьютером команды, представляющие приложение 108 электронной таблицы. В некоторых вариантах осуществления, где система 102 хранения данных содержит более чем один считываемый компьютером носитель данных, считываемые компьютером команды, представляющие приложение 108 электронной таблицы, распределяются по двум или более считываемым компьютером носителям данных. В других вариантах осуществления, где система 102 хранения данных содержит более чем один считываемый компьютером носитель данных, считываемые компьютером команды, представляющие приложение 108 электронной таблицы, сохраняются только на одном из считываемых компьютером носителей данных.[0017] The
[0018] Система 104 обработки является системой, содержащей множество блоков 110A-110N обработки (все вместе "блоки 110 обработки"). В различных вариантах осуществления система 104 обработки содержит разное количество блоков обработки. Например, система 104 обработки может содержать один, два, четыре, восемь, шестнадцать, тридцать два, шестьдесят четыре или другое количество блоков обработки. Каждый из блоков 110 обработки является физической интегральной схемой. Каждый из блоков 110 обработки выполняет считываемые компьютером команды асинхронно от других блоков 110 обработки. В результате, блоки 110 обработки могут независимо выполнять считываемые компьютером команды параллельно друг другу. В некоторых вариантах осуществления один или более блоков 110 обработки может индивидуально выдавать два или более логических блоков обработки. Считываемые компьютером команды могут независимо работать на логических блоках обработки и могут иначе работать как реальные блоки обработки.[0018] The
[0019] Система 106 отображения является системой, используемой системой 104 обработки для отображения информации пользователю. В различных вариантах осуществления система 106 отображения отображает информацию пользователю различными способами. Например, в некоторых вариантах осуществления система 106 отображения содержит графический интерфейс и монитор.[0019] The display system 106 is a system used by the
[0020] Блоки 110 обработки в системе 104 обработки выполняют считываемые компьютером команды, которые представляют приложение 108 электронной таблицы. Считываемые компьютером команды, которые представляют приложение 108 электронной таблицы, при выполнении блоками 110 обработки вынуждают вычислительную систему 100 предоставлять приложение 108 электронной таблицы. Приложение 108 электронной таблицы позволяет пользователю просматривать и манипулировать одной или более электронными таблицами. Электронные таблицы являются данными, которые организованы в качестве таблицы, имеющей одну или более строк и одну или более колонок. Электронная таблица может содержать различные типы данных. Например, табличные данные могут быть коммерческими данными, данными учета, военными данными, данными выставления счетов, статистическими данными, популяционными данными, демографическими данными, финансовыми данными, медицинскими данными, спортивными данными, научными данными или любым другим типом поддающихся сортировке данных, которые могут быть представлены в таблице.[0020] The processing units 110 in the
[0021] Ячейки в электронной таблице могут содержать значения, имеющие различные типы данных. Например, значения в ячейках могут быть целыми числами, действительными числами, числами с плавающей запятой, алфавитно-цифровыми текстовыми строками, датами, денежно-кредитными числами, нулевыми значениями и так далее. В дополнение к значениям в ячейках, каждая из ячеек может иметь множество других свойств. Например, каждая из ячеек может иметь свойство цвета фона, свойство цвета шрифта, одно или более свойств флага, свойство видимости, свойство стиля шрифта, свойство размера шрифта и так далее.[0021] Cells in a spreadsheet may contain values having various data types. For example, the values in cells can be integers, real numbers, floating point numbers, alphanumeric text strings, dates, monetary numbers, null values, and so on. In addition to the values in the cells, each of the cells can have many other properties. For example, each cell can have a background color property, a font color property, one or more flag properties, a visibility property, a font style property, a font size property, and so on.
[0022] Приложение 108 электронной таблицы в состоянии использовать множество потоков для выполнения процесса сортировки в электронной таблице. Потоком является часть программы, которая может работать независимо от и одновременно с другими частями программы. Процесс сортировки может быть выполнен по отношению к строкам или колонкам электронной таблицы. Для простоты объяснения этот документ рассматривает выполнение операции сортировки по отношению к строкам электронной таблицы. Однако должно быть оценено, что, если иначе не обозначено, рассмотрение в этом документе относительно строки одинаково применяется к колонкам. Термин "элемент данных" используется в этом документе для ссылки, в общем, на строку или колонку.[0022] The
[0023] Процесс сортировки сортирует строки в электронной таблице. В различных случаях электронная таблица может быть полной таблицей в электронной таблице, части таблицы или другом типе электронной таблицы. Кроме того, в некоторых вариантах осуществления пользователь приложения 108 электронной таблицы выбирает электронную таблицу.[0023] The sorting process sorts the rows in the spreadsheet. In various cases, the spreadsheet may be a complete spreadsheet in a spreadsheet, part of a spreadsheet, or other type of spreadsheet. In addition, in some embodiments, the user of the
[0024] Кроме того, в некоторых вариантах осуществления электронная таблица может быть сводной таблицей. Сводная таблица является электронной таблицей, которая суммирует один или более других табличных наборов данных, таких как электронные таблицы, таблицы реляционных баз данных, кубы данных онлайновой аналитической обработки (OLAP), другие типы многомерных наборов данных и другие типы табличных наборов данных. В некоторых вариантах осуществления пользователь в состоянии составить сводную таблицу посредством выбора строки c обозначением колонки и колонки с обозначением колонки в исходной таблице. Значения в ячейках в строке с обозначением колонки становятся обозначениями строки сводной таблицы. Значения в ячейках колонки с обозначением колонки становятся обозначениями колонки сводной таблицы. Значение в каждой ячейке сводной таблицы вычисляется из значений ячеек в колонке с обозначением колонки, которые имеют то же самое значение, что и обозначение строки у строки сводной таблицы, содержащей ячейку сводной таблицы. Сводная таблица может также включать в себя ячейки, которые имеют значения, вычисленные из значений в ячейках сводной таблицы. Например, сводная таблица может включать в себя ячейки, содержащие общие количества или счет значений в колонках или строках сводной таблицы. В некоторых вариантах осуществления пользователи также в состоянии составить сводные таблицы посредством выбора строк исходной таблицы вместо колонок исходной таблицы.[0024] Furthermore, in some embodiments, the spreadsheet may be a pivot table. A pivot table is a spreadsheet that summarizes one or more other tabular datasets, such as spreadsheets, relational database tables, online analytical processing (OLAP) data cubes, other types of multidimensional datasets, and other types of tabular datasets. In some embodiments, the user is able to compile a pivot table by selecting a row with a column designation and a column designating a column designation in the source table. The values in the cells in the row with the column designation become the row designations of the pivot table. The values in the column cells with the column designation become the column designations of the pivot table. The value in each cell of the pivot table is calculated from the values of the cells in the column with the column designation, which have the same value as the row designation of the row of the pivot table containing the pivot table cell. The pivot table may also include cells that have values calculated from the values in the cells of the pivot table. For example, a pivot table may include cells containing total or count values in columns or rows of a pivot table. In some embodiments, users are also able to create pivot tables by selecting rows from the source table instead of columns from the source table.
[0025] В некоторых вариантах осуществления пользователь в состоянии выбрать две или более колонок с обозначением строки и колонку с обозначением колонки. В таких вариантах осуществления комбинации значений в ячейках колонок с обозначением строки становятся обозначениями строк у строк в сводной таблице и значения ячеек в колонке с обозначением колонки становятся обозначениями колонки в сводной таблице.[0025] In some embodiments, the user is able to select two or more columns with a line designation and a column with a column designation. In such embodiments, combinations of values in the column cells with the row designation become the row designations of the rows in the pivot table and the cell values in the column designation column become the column designations in the pivot table.
[0026] В некоторых вариантах осуществления электронная таблица может включать в себя скрытые строки. Скрытой строкой является строка, которая находится в электронной таблице, но не видна пользователю приложения 108 электронной таблицы. Пользователь может захотеть скрыть конкретные строки для упрощения представления электронной таблицы. В таких вариантах осуществления процесс сортировки сортирует скрытые, а также видимые строки в электронной таблице.[0026] In some embodiments, the spreadsheet may include hidden rows. The hidden row is the row that is in the spreadsheet but not visible to the user of the
[0027] Сортировка строк в электронной таблице содержит манипулирование порядком строк в электронной таблице таким образом, чтобы строки в электронной таблице располагались заданным образом. Строки в электронной таблице располагаются заданным образом, когда строки располагаются заданным образом для каждой отсортированной колонки. Колонкой сортировки является колонка в электронной таблице, в которой сортируются строки. В операции сортировки по колонкам колонки в электронной таблице располагаются заданным образом, когда колонки располагаются заданным образом для каждой строки сортировки. Термин "линия сортировки" используется в данном документе для ссылки обычно на колонку сортировки или строку сортировки.[0027] Sorting rows in a spreadsheet comprises manipulating the order of the rows in the spreadsheet so that the rows in the spreadsheet are positioned in a predetermined manner. Rows in a spreadsheet are positioned in a predetermined manner when rows are arranged in a predetermined manner for each sorted column. A sort column is a column in a spreadsheet in which rows are sorted. In a column sorting operation, the columns in the spreadsheet are arranged in a predetermined manner, when the columns are arranged in a predetermined manner for each sorting row. The term "sort line" is used herein to refer usually to a sort column or sort line.
[0028] Каждая колонка сортировки имеет требования к сортировке. Требования к сортировке включают в себя релевантное свойство и отношение порядка. Релевантное свойство может быть множеством различных свойств ячеек в колонке сортировки. Например, релевантное свойство может быть значениями в ячейках, цветом ячеек, флагами в отношении ячеек, цветами шрифтов в ячейках, стилями шрифтов в ячейках, размером шрифтов в ячейках, статус скрытый/видимый ячеек и другими свойствами ячеек.[0028] Each sorting column has sorting requirements. Sort requirements include the relevant property and order relation. A relevant property can be many different cell properties in a sort column. For example, a relevant property can be cell values, cell color, cell flags, font colors in cells, font styles in cells, font size in cells, hidden / visible cell status, and other cell properties.
[0029] Отношение порядка является набором из одного или более правил, которые определяют, как свойства упорядочены. Примерные типы отношений порядка включают в себя алфавитный порядок, обратный алфавитный порядок, числовой порядок, обратный числовой порядок, хронологический порядок, обратный хронологический порядок, категорический порядок, географический порядок и другие типы заданий. В качестве одного конкретного примера категорического порядка, отношение порядка могут определять порядок по Булевым значениям, указывая, что все истинные значения находятся перед любыми ложными значениями. В другом примере отношение порядка могут определять порядок по цветам ячейки, указывая, что синие ячейки находятся перед зелеными ячейками, желтые ячейки находятся перед синими ячейками, красные ячейки находятся перед желтыми ячейками и так далее. В некоторых вариантах осуществления пользователь приложения 108 электронной таблицы имеет возможность выбрать колонки сортировки и требования сортировки для этих колонок сортировки.[0029] An order relation is a collection of one or more rules that determine how properties are ordered. Exemplary types of order relationships include alphabetical order, reverse alphabetical order, numerical order, reverse numerical order, chronological order, reverse chronological order, categorical order, geographical order, and other types of tasks. As one specific example of a categorical order, the order relation can determine the order by Boolean values, indicating that all true values are before any false values. In another example, the order relation can determine the order by cell colors, indicating that blue cells are in front of green cells, yellow cells are in front of blue cells, red cells are in front of yellow cells, and so on. In some embodiments, the user of the
[0030] Когда имеются множественные колонки сортировки, эти колонки сортировки ранжируются. Строки в электронной таблице сортируются первыми в соответствии с требованиями сортировки самой высокой по рангу колонки сортировки, затем в соответствии с требованиями сортировки второй, самой высокой по рангу колонки сортировки и так далее. Следовательно, строки располагаются заданным образом для заданной колонки сортировки, когда для любых двух строк, имеющих одинаковые релевантные свойства в ячейках каждой более высокой по рангу колонки сортировки, эти две строки удовлетворяют требованиям сортировки заданной колонки сортировки. Эти две строки удовлетворяют требованиям сортировки заданной колонки сортировки, когда отношение порядка для заданной колонки сортировки сохраняется истинным для релевантного свойства этих двух ячеек.[0030] When there are multiple sorting columns, these sorting columns are ranked. The rows in the spreadsheet are sorted first in accordance with the sorting requirements of the highest sort column, then in accordance with the sorting requirements of the second, highest sort column, and so on. Therefore, the rows are arranged in the specified way for a given sorting column, when for any two rows that have the same relevant properties in the cells of each higher-ranking sorting column, these two rows satisfy the sorting requirements of a given sorting column. These two rows satisfy the sorting requirements of a given sorting column when the order relation for a given sorting column is kept true for the relevant property of these two cells.
[0031] Как описано подробно в другом месте этого документа, приложение 108 электронной таблицы делит строки в электронной таблице на множество блоков. Блоком является набор строк. Следовательно, о блоке можно думать как о меньшей электронной таблице. В некоторых вариантах осуществления количество строк в каждом из блоков основано на количестве строк в электронной таблице и количестве блоков 110 обработки. По большей части количество блоков равно количеству блоков обработки 110 в системе 104 обработки.[0031] As described in detail elsewhere in this document,
[0032] После того как строки разделяются на блоки, процесс сортировки входит в фазу сортировки блока. Во время фазы сортировки блока приложение 108 электронной таблицы использует множественные потоки сортировки блоков для сортировки строк в блоках. Количество потоков сортировки блока равно количеству блоков. Каждый из потоков сортировки блоков работает для сортировки строк в каждом из блоков.[0032] After the lines are divided into blocks, the sorting process enters the block sorting phase. During the block sorting phase, the
[0033] После того как потоки сортировки блока отсортируют строки в блоках, процесс сортировки входит в фазу объединения (слияния). Во время фазы объединения приложение 108 электронной таблицы использует множественные потоки объединения для генерирования блока конечного результата. Блок конечного результата содержит каждую из строк в электронной таблице. Строки в блоке конечного результата упорядочены заданным образом. Каждым из потоков объединения является поток, который объединяет два исходных блока для генерирования блока результата. Каждый из исходных блоков потока объединения может быть или одним из сортированных блоков, сгенерированных потоком сортировки блока, или блоком результата, сгенерированным другим потоком объединения. Например, исходные блоки потока объединения могут быть сортированными блоками, сгенерированными потоками сортировки блоков. В другом примере исходные блоки потока объединения могут быть сортированным блоком, сгенерированным одним из потоков сортировки блока, и блоком результата, сгенерированным другим потоком объединения. В еще одном примере исходные блоки потока объединения могут быть блоками результата, сгенерированными другими потоками объединения.[0033] After the block sort streams sort the rows in the blocks, the sort process enters the merge (merge) phase. During the combining phase, the
[0034] После того, как блок конечного результата генерируется, приложение 108 электронной таблицы выводит данные результата для представления пользователю приложения 108 электронной таблицы. Данные результата зависят от порядка строк в блоке конечного результата.[0034] After the end result block is generated, the
[0035] В различных вариантах осуществления приложение 108 электронной таблицы выводит различные типы данных результата. Например, в некоторых вариантах осуществления приложение 108 электронной таблицы отображает сортированную версию электронной таблицы, в которой строки в электронной таблице упорядочены в соответствии с порядком строк в блоке конечного результата. Кроме того, в некоторых вариантах осуществления приложение 108 электронной таблицы генерирует и отображает сообщение, показывающее по меньшей мере некоторые строки в блоке конечного результата. Кроме того, в некоторых вариантах осуществления данные результата необязательно включают в себя все строки в электронной таблице. В случаях, когда данные результата используются другим процессом или поднаборы электронной таблицы являются предметом для дальнейшей сортировки, данные результата необязательно представляются пользователю.[0035] In various embodiments, the
[0036] Фиг. 2 является блок-схемой, иллюстрирующей примерный альтернативный вариант осуществления вычислительной системы 100. Как иллюстрировано в примере на фиг. 2, вычислительная система 100 содержит систему 102 хранения данных и систему 104 обработки, как в примерном варианте осуществления, иллюстрированном на фиг. 1. Однако в отличие от примерного варианта осуществления, иллюстрированного на фиг. 1, примерный альтернативный вариант осуществления вычислительной системы 100, иллюстрированный на фиг. 2, имеет интерфейс 200 сети вместо системы 106 отображения.[0036] FIG. 2 is a block diagram illustrating an exemplary alternative embodiment of a
[0037] Система 200 интерфейса сети позволяет вычислительной системе 100 посылать и принимать данные от устройства 202 клиента через сеть 204. Сеть 204 является системой связи, содержащей вычислительные устройства и линии связи, которые облегчают связь между вычислительной системой 100 и устройством 202 клиента. В различных вариантах осуществления сеть 204 включает в себя различные типы вычислительных устройств. Например, сеть 204 может включать в себя маршрутизаторы, коммутаторы, мобильные точки доступа, мосты, концентраторы, устройства обнаружения вторжения, устройства хранения, автономные сервера, сверхкомпактные сервера (блейды), датчики, настольные компьютеры, межсетевые экраны, ноутбуки, переносные компьютеры, мобильные телефоны и другие типы вычислительных устройств. В различных вариантах осуществления сеть 204 включает в себя различные типы линий связи. Например, сеть 204 может включать в себя проводные и/или беспроводные линии связи. Кроме того, в различных вариантах осуществления сеть 204 реализуется в различных масштабах. Например, сеть 204 может быть реализована в качестве одной или более локальных сетей (сетей LAN), городских вычислительных сетей, подсетей, глобальных сетей (таких как Интернет) или может быть реализована в другом масштабе.[0037] The
[0038] Устройство 202 клиента является вычислительным устройством. Например, устройство 202 клиента может быть персональным компьютером, используемым пользователем. Пользователь использует устройство 202 клиента для посылки запросов в вычислительную систему 100 и приема информации от вычислительной системы 100 через сеть 204. Таким образом, пользователь может использовать устройство 202 клиента для рассмотрения и манипулирования табличными данными посредством использования приложения 108 электронной таблицы. Например, вычислительная система 100 может посылать данные результата на устройство 202 клиента через сеть 204. В этом примере устройство 202 клиента сконфигурировано для обработки данных результата для отображения сортированной версии электронной таблицы пользователю устройства 202 клиента. Например, устройство 202 клиента может выдавать веб-страницу, содержащую данные результата, или взаимодействовать с приложением клиента для отображения данных результата.[0038] The
[0039] Фиг. 3 является последовательностью операций, иллюстрирующей примерную операцию 300 для сортировки электронной таблицы. Как иллюстрировано в примере на фиг. 3, операция 300 начинается, когда приложение 108 электронной таблицы принимает команду (302) сортировки. Команда сортировки дает команду приложению 108 электронной таблицы начинать процесс сортировки в конкретной электронной таблице. Кроме того, команда сортировки может задавать релевантное свойство, отсортированную колонку в электронной таблице и отношение упорядочения. В некоторых вариантах осуществления пользователь приложения 108 электронной таблицы может выбирать электронную таблицу, релевантное свойство, отсортированную колонку и/или отношение упорядочения.[0039] FIG. 3 is a flowchart illustrating an
[0040] В различных вариантах осуществления приложение 108 электронной таблицы принимает команду сортировки различными способами. Например, в некоторых вариантах осуществления приложение 108 электронной таблицы принимает команду сортировки, когда пользователь приложения электронной таблицы выбирает конкретное пользовательское средство управления приложением 108 электронной таблицы. Кроме того, в некоторых вариантах осуществления приложение 108 электронной таблицы принимает команду сортировки, когда пользователь вводит конкретную команду клавиатуры. Кроме того, в некоторых вариантах осуществления приложение 108 электронной таблицы принимает команду сортировки от другого процесса, потока или приложения, работающего в вычислительной системе 100, устройстве 202 клиента или другом вычислительном устройстве.[0040] In various embodiments, the
[0041] Кроме того, в некоторых вариантах осуществления приложение 108 электронной таблицы начинает операцию 300 без приема явной команды сортировки от пользователя или другого процесса, потока или приложения. Например, в некоторых вариантах осуществления приложение 108 электронной таблицы может начинать операцию 300 автоматически на периодической основе или на основании расписания. Кроме того, в некоторых вариантах осуществления приложение 108 электронной таблицы может начинать операцию 300 автоматически, когда пользователь обновляет одну или более строк в электронной таблице. Кроме того, в некоторых вариантах осуществления, приложение 108 электронной таблицы начинает операцию 300 автоматически в ответ на обнаружение или прием события, указывающего, что изменение имело место в источнике данных, из которого выводится электронная таблица.[0041] In addition, in some embodiments, the
[0042] В ответ на прием команды сортировки или иного приема индикации для начала процесса сортировки в электронной таблице приложение 108 электронной таблицы определяет, превышает ли общее количество строк в электронной таблице нижний предел (304). В различных вариантах осуществления нижний предел имеет различные значения. Например, в некоторых вариантах осуществления нижним пределом является 255. В других вариантах осуществления нижним пределом является больше, чем 255, или меньше, чем 255. В некоторых вариантах осуществления приложение 108 электронной таблицы представляет пользовательский интерфейс, который позволяет административному пользователю устанавливать нижний предел. Административный пользователь может быть пользователем, который принимает данные результата, или другим пользователем.[0042] In response to receiving a sort command or otherwise receiving an indication to start the sort process in the spreadsheet, the
[0043] Если количество строк в электронной таблице не превышает нижний предел ("НЕТ" из 304), приложение 108 электронной таблицы использует единственный поток для генерирования блока (306) конечного результата. Единственный поток генерирует блок конечного результата посредством сортировки строк в электронной таблице таким образом, чтобы строки в электронной таблице упорядочивались заданным образом. Использование единственного потока для сортировки строк может быть более эффективным, чем использование множественных потоков для сортировки строк, когда количество строк в электронной таблице относительно мало. Причина состоит в том, что могут быть вычислительные штрафы (например, задержки), ассоциированные со стартом или пробуждением потоков. Такие вычислительные штрафы могут только отрицательно воздействовать, когда имеется достаточное количество строк.[0043] If the number of rows in the spreadsheet does not exceed the lower limit ("NO" of 304), the
[0044] Если количество строк в электронной таблице превышает нижний предел ("ДА" из 304), приложение 108 электронной таблицы определяет подходящее количество блоков (308). В различных вариантах осуществления приложение 108 электронной таблицы определяет подходящее количество блоков различными способами. Например, в некоторых вариантах осуществления минимальный размер задания является минимальным количеством строк в блоке, нуждающимся в старте оправданного дополнительного потока сортировки блока. В некоторых случаях нижний предел равен минимальному размеру задания, умноженному на два. В этом примере, если количество строк в электронной таблице, разделенное на минимальный размер задания, меньше, чем или равно количеству блоков 110 обработки в системе 104 обработки, подходящее количество блоков равно количеству строк, разделенных на минимальный, округленный в меньшую сторону размер задания. Например, если имеется 300 строк, минимальный размер задания равен 128, и имеется восемь блоков обработки в системе 104 обработки, соответствующее количество блоков равно двум. Если количество строк в электронной таблице, разделенной на минимальный размер задания, больше, чем или равно количеству блоков 110 обработки в системе 104 обработки, соответствующее количество блоков равно количеству блоков 110 обработки. Например, если есть 30 000 строк, минимальный размер задания равен 128, и имеется восемь блоков обработки в системе 104 обработки, соответствующее количество блоков равно восьми. В некоторых вариантах осуществления приложение 108 электронной таблицы представляет пользовательский интерфейс, который позволяет административному пользователю устанавливать минимальный размер задания.[0044] If the number of rows in the spreadsheet exceeds the lower limit ("YES" of 304), the
[0045] Затем приложение 108 электронной таблицы делит строки в электронной таблице на набор блоков (310). Количество блоков в наборе блоков равно соответствующему количеству блоков. Каждый блок в наборе блоков содержит приблизительно одинаковое количество строк.[0045] Then, the
[0046] В различных вариантах осуществления блоки реализованы различными способами. Например, в некоторых вариантах осуществления блоки реализуются в качестве структуры данных, которые содержат идентификаторы строк (например, строка "513", строка "234", строка "876" и т.д.). В таких вариантах осуществления вставка строк в блок содержит вставку идентификаторов строк в блок, и сортировка строк в блоке содержит перекомпоновку идентификаторов строк в блоке. В других вариантах осуществления блоки являются структурами данных, содержащими копии строк.[0046] In various embodiments, blocks are implemented in various ways. For example, in some embodiments, the blocks are implemented as a data structure that contains row identifiers (for example, row "513", row "234", row "876", etc.). In such embodiments, inserting rows into a block comprises inserting row identifiers into a block, and sorting rows in a block comprises rearranging row identifiers in a block. In other embodiments, blocks are data structures containing copies of strings.
[0047] После деления строк в блоки приложение 108 электронной таблицы начинает фазу сортировки блока процесса сортировки. Во время фазы сортировки блока процесса сортировки приложение 108 электронной таблицы использует множественные потоки сортировки блока для сортировки строк в блоках (312). Количество потоков сортировки блока в наборе потоков сортировки блока равно количеству блоков в наборе блоков. Например, если количество блоков равно восьми, количество потоков сортировки блока равно восьми. В некоторых случаях каждый поток сортировки блока выполняется параллельно в отличном одном из блоков 110 обработки в системе 104 обработки. Приложение 108 электронной таблицы назначает один из блоков каждому из потоков сортировки блока. Потоки сортировки блока сортируют строки в блоках, назначенных потокам сортировки блока. В различных вариантах осуществления потоки сортировки блока используют различные алгоритмы для сортировки строк в блоках. Например, в различных вариантах осуществления потоки сортировки блока используют алгоритм быстрой сортировки (например, qsort), алгоритм пузырьковой сортировки, алгоритм сортировки объединением (слиянием) или другой алгоритм сортировки для сортировки строк в блоках.[0047] After dividing the rows into blocks, the
[0048] В некоторое время после того, как приложение 108 электронной таблицы пробуждает набор потоков сортировки блока, приложение 108 электронной таблицы определяет, что потоки сортировки блока закончили сортировать каждый из блоков (314). В различных вариантах осуществления приложение 108 электронной таблицы определяет, что потоки сортировки блока закончили сортировать каждый из блоков различными способами. Например, в некоторых вариантах осуществления потоки сортировки блока выдают индикаторы завершения приложению 108 электронной таблицы, когда потоки сортировки блока закончили сортировать блоки. В других вариантах осуществления потоки сортировки блока сохраняют сортированные блоки в буфере. В таких вариантах осуществления приложение 108 электронной таблицы определяет, что потоки сортировки блока закончили сортировать блоки, когда буфер содержит сортированную версию каждого из блоков.[0048] At some time after the
[0049] После того как потоки сортировки блока закончили сортировать блоки, фаза сортировки блока процесса сортировки заканчивается, и начинается фаза объединения из процесса сортировки. Во время фазы объединения процесса сортировки приложение 108 электронной таблицы генерирует дерево (316) потока. Деревом потока является двоичное дерево, в котором каждый уровень, кроме, возможно, последнего уровня, полностью заполнено. Двоичным деревом является структура данных дерева, в которой каждый узел имеет самое большее два дочерних узла.[0049] After the block sort threads have finished sorting the blocks, the sort phase of the block of the sort process ends and the combining phase of the sort process begins. During the merge phase of the sorting process, the
[0050] Количество потоков объединения в дереве потоков равно количеству блоков минус один. Листовым потоком является поток объединения, не имеющий дочерних потоков в дереве потоков. Внутренним потоком является поток объединения, имеющий один или более дочерних потоков в дереве потоков. Неполным внутренним потоком является внутренний поток, имеющий только один дочерний поток в дереве потоков. Полным внутренним потоком является внутренний поток, имеющий два дочерних потока в дереве потоков. Корневым потоком является поток объединения, не имеющий родительских потоков в дереве потоков.[0050] The number of merge threads in the thread tree is equal to the number of blocks minus one. A leaf stream is a union stream that does not have child streams in the stream tree. An internal thread is a union thread that has one or more child threads in a thread tree. An incomplete internal thread is an internal thread that has only one child thread in the thread tree. A full internal thread is an internal thread that has two child threads in the thread tree. The root thread is a union thread that does not have parent threads in the thread tree.
[0051] Как описано в другом месте этого документа, листовой поток функционирует для объединения (слияния) сортированных блоков, назначенных на листовой поток, таким образом генерируя блок результата. Блок результата содержит каждую из строк в назначенных блоках. Строки в блоке результата упорядочены заданным образом. Неполный внутренний поток функционирует для объединения блоков результата, сгенерированных его единственным дочерним процессом, с сортированным блоком, назначенным на неполный внутренний поток. Полный внутренний поток функционирует для объединения блоков результата, сгенерированных его дочерними потоками в большие блоки результата. В конечном счете, корневой поток генерирует блок конечного результата.[0051] As described elsewhere in this document, the leaf stream functions to combine (merge) the sorted blocks assigned to the leaf stream, thereby generating a result block. The result block contains each of the rows in the assigned blocks. The rows in the result block are ordered in the specified way. An incomplete internal thread functions to combine result blocks generated by its only child process with a sorted block assigned to an incomplete internal thread. A full internal thread functions to combine the result blocks generated by its child threads into large result blocks. Ultimately, the root thread generates a block of the final result.
[0052] В различных вариантах осуществления приложение 108 электронной таблицы выполняет различные действия для генерирования дерева потоков. Например, в некоторых вариантах осуществления приложение 108 электронной таблицы генерирует дерево потоков посредством первой идентификации доступных потоков объединения и/или иллюстрации потоков объединения. В этом примере приложение 108 электронной таблицы затем генерирует структуру данных указателей, которая содержит элемент для каждого потока объединения. Элемент для потока объединения задает исходные указатели и указатель элемента назначения. Исходные указатели задают местоположения памяти, которые хранят блоки, которые поток объединения должен объединить. Указатель элемента назначения задает местоположение памяти, где поток объединения должен сохранить блок результата, сгенерированный потоком объединения. Структура данных указателя может быть множеством различных типов структур данных, включающих в себя множества, связанные списки, векторы, таблицы и так далее.[0052] In various embodiments, the
[0053] После генерирования дерева потоков или в качестве части генерирования дерева потока приложение 108 электронной таблицы назначает два из блоков на каждый листовой поток в дереве (318) потоков. В различных вариантах осуществления приложение 108 электронной таблицы назначает блоки на листовые потоки различными способами. Например, в вариантах осуществления, которые используют структуру данных указателя, описанную выше, приложение 108 электронной таблицы назначает блок на листовой поток, выдавая в элементе для листового потока исходный указатель на местоположение памяти блока. В другом примере приложение 108 электронной таблицы назначает блок на листовой поток, выдавая идентификатор блока в листовой поток в качестве параметра.[0053] After generating the stream tree, or as part of the generation of the stream tree, the
[0054] Кроме того, приложение 108 электронной таблицы определяет, имеется ли нечетное число блоков (320). Если имеется нечетное число блоков, дерево потоков содержит неполный внутренний поток. Следовательно, если имеется нечетное число блоков ("ДА" 320), приложение 108 электронной таблицы назначает один из блоков на неполный внутренний поток (322).[0054] In addition, the
[0055] После назначения блоков неполному внутреннему потоку или определения того, что не имеется нечетного числа блоков ("НЕТ" 320), приложение 108 электронной таблицы использует потоки объединения для генерирования блока (324) конечного результата. Для использования потоков объединения для генерирования блока конечного результата приложение 108 электронной таблицы пробуждает потоки объединения. В различных вариантах осуществления приложение 108 электронной таблицы пробуждает потоки объединения различными способами. Например, в некоторых вариантах осуществления приложение 108 электронной таблицы пробуждает потоки объединения, предоставляя событие пробуждения потоку объединения. В других вариантах осуществления приложение 108 электронной таблицы запускает один или более методов интерфейса операционной системы для пробуждения потока объединения.[0055] After assigning blocks to an incomplete internal stream or determining that there are no odd number of blocks ("NO" 320),
[0056] Затем приложение 108 электронной таблицы принимает индикацию завершения от корневого потока в дереве (326) потоков. Индикация завершения указывает, что корневой поток закончил генерирование блока конечного результата. Блок конечного результата содержит все строки в электронной таблице. Строки в блоке конечного результата упорядочены заданным образом.[0056] Then, the
[0057] После того как приложение 108 электронной таблицы принимает индикацию завершения от корневого потока или после того, как строки сортированы на этапе 306, приложение 108 электронной таблицы возвращает блок конечного результата (328). Затем приложение 108 электронной таблицы может выдавать данные результата, которые зависят от блока конечного результата.[0057] After the
[0058] Фиг. 4 является диаграммой, показывающей примерное дерево 400 потоков. Как иллюстрировано в примере на фиг. 4, дерево 400 потоков содержит поток 402, поток 404, поток 407, поток 408, поток 410 и поток 412. Поток 402, поток 404 и поток 406 являются внутренними потоками. Поток 402 и поток 404 являются полными внутренними потоками. Поток 406 является неполным внутренним потоком. Поток 408, поток 410 и поток 412 являются листовыми потоками.[0058] FIG. 4 is a diagram showing an
[0059] Кроме того, пример фиг. 4 показывает, что блоки 414 и 416 назначены на поток 408, что блоки 418 и 420 назначены на поток 410, что блоки 422 и 424 назначены на поток 412, и что блок 426 назначен на поток 406. Другими словами, блоки 418 и 420 являются исходными блоками потока 408. Блоки 418 и 420 являются исходными блоками потока 410. Блоки 422 и 424 являются исходными блоками потока 412. Блок 426 является исходным блоком потока 406.[0059] In addition, an example of FIG. 4 shows that blocks 414 and 416 are assigned to stream 408, that blocks 418 and 420 are assigned to stream 410, that blocks 422 and 424 are assigned to stream 412, and that
[0060] Поток 408 объединяет блоки 414 и 416 для генерирования блока результата. Поток 410 объединяет блоки 418 и 420 для генерирования блока результата. Поток 412 объединяет блоки 422 и 424 для генерирования блока результата. Поток 404 объединяет блоки результата, сгенерированные потоками 408 и 410, для генерирования блока результата. Другими словами, блоки результата, сгенерированные потоками 408 и 410, являются исходными блоками потока 404. Поток 406 объединяет блоки 426 и блок результата, сгенерированный потоком 412 для генерирования блока результата. Другими словами, блок результата, сгенерированный потоком 412, является исходным блоком потока 406. Поток 402 объединяет блоки результата, сгенерированные потоками 404 и 406, для генерирования блока конечного результата. Другими словами, блоки результата, сгенерированные потоками 404 и 406, являются исходными блоками потока 402.[0060]
[0061] Фиг. 5 является последовательностью операций, иллюстрирующей примерную операцию 500, выполняемую листовым потоком во время фазы объединения процесса сортировки. Хотя операция 500 объясняется относительно единственного листового потока, каждый листовой поток в дереве потоков может выполнять операцию 500. Как иллюстрировано в примере на фиг. 5, операция 500 начинается, когда листовой поток пробуждается приложением 108 (502) электронной таблицы. Пробуждение потока является процессом подготовки потока к запуску. В различных вариантах осуществления приложение 108 электронной таблицы пробуждает листовой поток различными способами. Например, в некоторых вариантах осуществления приложение 108 электронной таблицы поддерживает ссылки на спящие потоки, которые в состоянии выполнять операцию 500. В некоторых вариантах осуществления спящие потоки могут включать в себя потоки сортировки блока, используемые в фазе сортировки блока процесса сортировки. Другими словами, один из потоков сортировки блоков может работать в качестве листового потока. Для пробуждения листового потока приложение 108 электронной таблицы выдает событие пробуждения в поток, который может выполнять операцию 500, и предоставляет листовому потоку ссылку на первый блок, назначенный на этот листовой поток, и второй блок, назначенный на этот листовой поток.[0061] FIG. 5 is a flowchart illustrating an
[0062] После того как листовой поток пробуждается, этот листовой поток определяет, является ли наибольшая строка в первом блоке меньше, чем наименьшая строка во втором блоке (504). Так как строки в первом блоке упорядочены заданным образом, наибольшая строка в первом блоке является последней строкой в первом блоке. Так как строки во втором блоке упорядочены заданным образом, наименьшая строка во втором блоке является первой строкой во втором блоке. Если листовой поток определяет, что наибольшая строка в первом блоке является меньше, чем наименьшая строка во втором блоке, не происходит никакого наложения между первым блоком и вторым блоком, и нет никакой необходимости сравнивать индивидуальные строки в первом блоке и втором блоке. Вместо этого, если листовой поток определяет, что наибольшая строка в первом блоке является меньше, чем наименьшая строка во втором блоке ("ДА" 504), листовой поток вставляет первый блок в меньший конец блока результата и вставляет второй блок в больший конец блока результата (506). Таким образом, блок результата содержит все строки в первом блоке и втором блоке, и строки в блоке результата упорядочены заданным образом.[0062] After the leaf stream wakes up, this leaf stream determines whether the largest row in the first block is less than the smallest row in the second block (504). Since the rows in the first block are ordered in the specified way, the largest row in the first block is the last row in the first block. Since the rows in the second block are ordered in the specified way, the smallest row in the second block is the first row in the second block. If the leaf stream determines that the largest row in the first block is smaller than the smallest row in the second block, there is no overlap between the first block and the second block, and there is no need to compare the individual rows in the first block and the second block. Instead, if the leaf stream determines that the largest row in the first block is less than the smallest row in the second block (“YES” 504), the leaf stream inserts the first block at the lower end of the result block and inserts the second block at the larger end of the result block ( 506). Thus, the result block contains all the rows in the first block and the second block, and the rows in the result block are ordered in the specified way.
[0063] Если листовой поток определяет, что наибольшая строка в первом блоке не является меньше, чем наименьшая строка во втором блоке, листовой поток определяет, является ли наибольшая строка во втором блоке меньше, чем наименьшая строка в первом блоке (508). Так как строки во втором блоке упорядочены заданным образом, наибольшая строка во втором блоке является последней строкой во втором блоке. Так как строки в первом блоке упорядочены заданным образом, наименьшая строка в первом блоке является первой строкой в первом блоке. Если листовой поток определяет, что наибольшая строка во втором блоке является меньше, чем наименьшая строка в первом блоке ("ДА" 508), листовой поток вставляет второй блок в меньший конец блока результата и вставляет первый блок в больший конец блока результата (510). Таким образом, блок результата содержит все строки в первом блоке и втором блоке, и строки в блоке результата упорядочены заданным образом.[0063] If the leaf stream determines that the largest row in the first block is not less than the smallest row in the second block, the leaf stream determines whether the largest row in the second block is smaller than the smallest row in the first block (508). Since the rows in the second block are ordered in the specified way, the largest row in the second block is the last row in the second block. Since the rows in the first block are ordered in the specified way, the smallest row in the first block is the first row in the first block. If the leaf stream determines that the largest row in the second block is smaller than the smallest row in the first block (“YES” 508), the leaf stream inserts the second block at the lower end of the result block and inserts the first block at the larger end of the result block (510). Thus, the result block contains all the rows in the first block and the second block, and the rows in the result block are ordered in the specified way.
[0064] Если наибольшая строка в первом блоке является больше, чем наименьшая строка второго блока, и наибольшая строка во втором блоке является больше, чем наименьшая строка в первом блоке, имеется некоторое наложение между первым блоком и вторым блоком. Если листовой поток определяет, что наибольшая строка во втором блоке является не меньше, чем наименьшая строка в первом блоке ("НЕТ" 508), листовой поток определяет, имеются ли какие-нибудь оставшиеся строки в первом блоке (512). Строка является оставшейся строкой, когда строка уже не находится в блоке результата.[0064] If the largest row in the first block is larger than the smallest row of the second block and the largest row in the second block is larger than the smallest row in the first block, there is some overlap between the first block and the second block. If the leaf stream determines that the largest row in the second block is not less than the smallest row in the first block (“NO” 508), the leaf stream determines whether there are any remaining rows in the first block (512). A row is the remaining row when the row is no longer in the result block.
[0065] Если имеются одна или более оставшихся строк в первом блоке ("ДА" 512), листовой поток определяет, имеются ли какие-нибудь оставшиеся строки во втором блоке (514). Если нет никаких оставшихся строк во втором блоке, листовой поток уже вставил все строки во втором блоке в блок результата. Следовательно, если нет никаких оставшихся строк во втором блоке ("НЕТ" 514), листовой поток вставляет любые оставшиеся строки в первом блоке в блок результата после наибольшей строки в блоке результата (518). После вставки оставшихся строк в первом блоке в блок результата блок результата содержит все строки в первом блоке и втором блоке, и строки в блоке результата упорядочены заданным образом.[0065] If there are one or more remaining rows in the first block ("YES" 512), the leaf stream determines whether there are any remaining rows in the second block (514). If there are no remaining rows in the second block, the leaf stream has already inserted all the rows in the second block into the result block. Therefore, if there are no remaining rows in the second block (“NO” 514), the sheet stream inserts any remaining rows in the first block into the result block after the largest row in the result block (518). After inserting the remaining rows in the first block into the result block, the result block contains all the rows in the first block and the second block, and the rows in the result block are ordered in the specified way.
[0066] Если имеется одна или более оставшихся строк во втором блоке ("ДА" 514), листовой поток идентифицирует минимальную строку (516). Минимальная строка является наименьшей из оставшихся строк в первом блоке и втором блоке.[0066] If there is one or more remaining rows in the second block ("YES" 514), the leaf stream identifies the minimum row (516). The smallest row is the smallest of the remaining rows in the first block and second block.
[0067] Как рассмотрено выше, в некоторых вариантах осуществления могут быть выбраны множественные колонки сортировки. Например, пользователь может указывать, что электронная таблица должна быть сначала сортирована по колонке "город" и затем по колонке "дата". Если имеется множество колонок сортировки, и если релевантные свойства в ячейках в наивысшей по рангу колонке сортировки из двух строк являются одинаковыми, минимальный поток объединения идентифицирует минимальную строку посредством сравнения релевантных свойств в ячейках в следующей наивысшей по рангу колонке сортировки этих двух строк. Если релевантные свойства ячеек в следующей наивысшей по рангу колонке сортировки являются одинаковыми, минимальный поток объединения идентифицирует минимальную строку посредством сравнения релевантных свойств в ячейках третьей, наивысшей по рангу колонки сортировки этих двух строк. Этот процесс сравнения продолжается до тех пор, пока не останется ни одной из колонок сортировки или пока минимальный поток объединения не идентифицирует одну из строк, которые меньше, чем другая строка. Если релевантные свойства ячеек во всех колонках сортировки этих двух строк равны, минимальный поток объединения может идентифицировать любую из строк в качестве минимальной строки.[0067] As discussed above, in some embodiments, multiple sorting columns may be selected. For example, the user may indicate that the spreadsheet must first be sorted by the column "city" and then by the column "date". If there are many sorting columns, and if the relevant properties in the cells in the highest ranked two-row sorting column are the same, the minimum merge stream identifies the minimum row by comparing the relevant properties in the cells in the next highest ranking sorting column of these two rows. If the relevant properties of the cells in the next highest sort column are the same, the minimum join stream identifies the minimum row by comparing the relevant properties in the cells of the third, highest ranking column of the two columns. This comparison process continues until there is no sort column left, or until the minimum join stream identifies one of the rows that is smaller than the other row. If the relevant properties of the cells in all the sorting columns of these two rows are equal, the minimum join stream can identify any of the rows as the minimum row.
[0068] Листовой поток вставляет минимальную строку в блок результата после наибольшей строки в блоке результата (520). После вставки минимальной строки в блок результата листовой поток снова определяет, имеются ли любые оставшиеся строки в первом блоке (512) и так далее.[0068] The leaf stream inserts the minimum row in the result block after the largest row in the result block (520). After inserting the minimum row in the result block, the leaf stream again determines if there are any remaining rows in the first block (512), and so on.
[0069] Если нет оставшихся строк в первом блоке, листовой поток уже вставил все строки в первом блоке в блок результата. Следовательно, если нет оставшихся строк в первом блоке ("НЕТ" 512), листовой поток вставляет любые оставшиеся строки во втором блоке в блок результата после наибольшей строки в блоке результата (514). После вставки оставшихся строк во втором блоке в блок результата блок результата содержит все строки в первом блоке и втором блоке, и строки в блоке результата упорядочены заданным образом.[0069] If there are no remaining rows in the first block, the leaf stream has already inserted all the rows in the first block into the result block. Therefore, if there are no remaining rows in the first block ("NO" 512), the leaf stream inserts any remaining rows in the second block into the result block after the largest row in the result block (514). After inserting the remaining rows in the second block into the result block, the result block contains all the rows in the first block and second block, and the rows in the result block are ordered in the specified way.
[0070] После выполнения любого из этапов 506, 510, 518 или 522 листовой поток определяет, является ли листовой поток корневым потоком (524). Если листовой поток является корневым потоком ("ДА" 524), листовой поток выдает индикацию завершения приложению 108 (526) электронной таблицы. Индикация завершения указывает, что листовой поток завершил объединение первого блока и второго блока. Если листовой поток не является корневым потоком ("НЕТ" 524), листовой поток выдает индикацию завершения родительскому потоку листового потока (528). После или доказательства индикации завершения приложению электронной таблицы или родительскому потоку листового потока листовой поток (530) переходит в режим сна.[0070] After performing any of
[0071] Фиг. 6 является последовательностью операций, иллюстрирующей примерную операцию 600, выполненную неполным внутренним потоком. Операция 600 начинается, когда неполный внутренний поток разбужен приложением 108 (602) электронной таблицы. Приложение 108 электронной таблицы предоставляет неполному внутреннему потоку ссылку на первый блок и второй блок. Первым блоком является блок результата, сгенерированный дочерним потоком неполного внутреннего потока. Вторым блоком является блок, который был произведен одним из потоков сортировки блока во время фазы сортировки блока процесса сортировки. Неполный внутренний поток и дочерний поток работают одновременно на различных потоках блоков 110 обработки. Следовательно, дочерний поток генерирует первый блок, в то время как неполный внутренний поток выполняет операцию 600. В результате, могут быть случаи, когда нет оставшихся строк в первом блоке, но дочерний поток может позже вставить больше строк в первый блок.[0071] FIG. 6 is a flowchart illustrating an
[0072] После пробуждения неполный внутренний поток определяет, имеются ли какие-нибудь оставшиеся строки в первом блоке (604). Если имеются одна или более оставшихся строк в первом блоке ("ДА" 604), неполный внутренний поток определяет, имеются ли какие-нибудь оставшиеся строки во втором блоке (606).[0072] After waking up, an incomplete internal thread determines whether there are any remaining rows in the first block (604). If there are one or more remaining lines in the first block (“YES” 604), the incomplete internal stream determines whether there are any remaining lines in the second block (606).
[0073] Если нет оставшихся строк во втором блоке ("НЕТ" 606), неполный внутренний поток вставляет любые оставшиеся строки в первом блоке в блок результата после наибольшей строки в блоке результата (608). Так как дочерний поток генерирует первый блок, в то время как неполный внутренний поток выполняет операцию 600, дочерний поток может добавить строки в первый блок, в то время как неполный внутренний поток выполняет операцию 600. Неполному внутреннему потоку не гарантируют, что дочерний поток не будет добавлять дополнительных строк в первый блок до тех пор, пока дочерний поток не предоставит индикацию завершения неполному внутреннему потоку. Следовательно, после того, как неполный внутренний поток вставляет оставшиеся строки в первом блоке в блок результата, неполный внутренний поток снова определяет, имеются ли какие-нибудь оставшиеся строки в первом блоке (604), и так далее.[0073] If there are no remaining rows in the second block ("NO" 606), the incomplete internal thread inserts any remaining rows in the first block into the result block after the largest row in the result block (608). Since the child thread generates the first block, while the incomplete internal thread performs
[0074] Если имеется одна или более оставшихся строк во втором блоке ("ДА" 606), неполный внутренний поток идентифицирует минимальную строку (610). Минимальной строкой является наименьшая оставшаяся строка или в первом блоке, или во втором блоке. Неполный внутренний поток затем вставляет минимальную строку в блок результата после наибольшей строки в блоке результата (612). После вставки минимальной строки в блок результата неполный внутренний поток снова определяет, имеются ли какие-нибудь оставшиеся строки в первом блоке (604) и так далее.[0074] If there is one or more remaining lines in the second block ("YES" 606), an incomplete internal stream identifies the minimum line (610). The smallest row is the smallest remaining row in either the first block or the second block. The incomplete internal thread then inserts the minimum row in the result block after the largest row in the result block (612). After inserting the minimum row in the result block, the incomplete internal stream again determines whether there are any remaining rows in the first block (604), and so on.
[0075] Если нет никаких оставшихся строк в первом блоке ("НЕТ" 612), неполный внутренний поток определяет, выполнен ли дочерний поток (614). Дочерний поток выполнен, когда дочерний поток предоставляет индикацию завершения неполному внутреннему потоку. Если дочерний поток еще не выполнен, дочерний поток может все еще продолжить вставлять строки в первый блок. Следовательно, если дочерний поток не выполнен ("НЕТ" 614), неполный внутренний поток ждет (616). В различных вариантах осуществления неполный внутренний поток ждет до тех пор, пока не произойдут различные события. Например, в некоторых вариантах осуществления неполный внутренний поток ждет до тех пор, пока не истечет таймер. В других вариантах осуществления неполный внутренний поток ждет до тех пор, пока не произойдет итоговое событие. Итоговое событие может быть вставкой строки в первый блок, индикацией завершения от дочернего потока или другим типом события. После того, как неполный внутренний поток завершает ожидание, неполный внутренний поток снова определяет, имеются ли какие-нибудь оставшиеся строки в первом блоке (604) и так далее.[0075] If there are no remaining lines in the first block ("NO" 612), the incomplete internal thread determines whether the child thread is executed (614). The child thread is executed when the child thread provides an indication of completion to an incomplete internal thread. If the child thread has not yet been executed, the child thread may still continue to insert rows in the first block. Therefore, if the child thread is not executed ("NO" 614), an incomplete internal thread is waiting (616). In various embodiments, an incomplete internal stream waits until various events occur. For example, in some embodiments, an incomplete internal thread waits until the timer expires. In other embodiments, an incomplete internal stream waits until a final event occurs. The resulting event may be an insertion of a row in the first block, an indication of completion from the child thread, or another type of event. After the incomplete internal thread completes the wait, the incomplete internal thread again determines if there are any remaining rows in the first block (604), and so on.
[0076] Если дочерний поток выполнен ("ДА" 614), неполный внутренний поток вставляет любые оставшиеся строки во втором блоке в блок результата после наибольшей строки в блоке результата (618). Если нет оставшихся строк во втором блоке, когда выполнен дочерний поток, неполный внутренний поток не вставляет строки в блок результата на этапе 618.[0076] If the child thread is executed ("YES" 614), the incomplete internal thread inserts any remaining rows in the second block into the result block after the largest row in the result block (618). If there are no remaining rows in the second block when the child thread is executed, the incomplete internal thread does not insert rows into the result block in
[0077] После вставки оставшихся строк во втором блоке в блок результата неполный внутренний поток определяет, является ли неполный внутренний поток корневым потоком (620). Если неполным внутренним потоком является корневой поток ("ДА" 620), неполный внутренний поток предоставляет индикацию завершения приложению 108 (622) электронной таблицы. Если неполный внутренний поток не является корневым потоком ("НЕТ" 620), неполный внутренний поток выдает индикацию завершения в родительский поток неполного внутреннего потока (624). После или выдачи индикации завершения в приложение 108 электронной таблицы или родительскому потоку неполный внутренний поток переходит в режим сна (626).[0077] After inserting the remaining rows in the second block into the result block, the incomplete internal stream determines whether the incomplete internal stream is the root stream (620). If the incomplete internal stream is the root stream ("YES" 620), the incomplete internal stream provides an indication of completion of the spreadsheet application 108 (622). If the incomplete internal stream is not a root stream ("NO" 620), the incomplete internal stream gives an indication of completion to the parent stream of the incomplete internal stream (624). After or issuing the completion indication to the
[0078] Фиг. 7 является последовательностью операций, иллюстрирующей примерную операцию 700, выполняемую полным внутренним потоком. Хотя операция 700 объясняется относительно единственного полного внутреннего потока, каждый полный внутренний поток в дереве потоков может выполнять операцию 700. Как иллюстрировано в примере на фиг. 7, операция 700 начинается, когда полный внутренний поток пробуждается приложением 108 (702) электронной таблицы. Приложение 108 электронной таблицы выдает в полный внутренний поток ссылку на первый блок и второй блок. Первым блоком является блок результата, сгенерированный первым дочерним потоком полного внутреннего потока. Вторым блоком является блок результата, сгенерированный вторым дочерним потоком полного внутреннего потока. Полный внутренний поток, первый дочерний поток и второй дочерний поток работают одновременно на различных потоках блоков 110 обработки. Следовательно, первый дочерний поток генерирует первый блок, и второй дочерний поток генерирует второй блок, в то время как полный внутренний поток выполняет операцию 700. Кроме того, так как полный внутренней поток и первый дочерний поток работают одновременно, могут быть ситуации, когда первый блок не содержит оставшихся строк, но первый дочерний поток может позже вставить больше строк в первый блок. Аналогично, так как полный внутренний поток и второй дочерний поток работают одновременно, могут быть ситуации, когда второй блок не содержит оставшихся строк, но второй дочерний поток может позже вставить больше строк во второй блок.[0078] FIG. 7 is a flowchart illustrating an
[0079] После пробуждения полный внутренний поток определяет, имеются ли какие-нибудь оставшиеся строки в первом блоке (704). Если полный внутренний поток определяет, что есть одна или более оставшихся строк в первом блоке ("ДА" 704), полный внутренний поток определяет, имеются ли какие-нибудь оставшиеся строки во втором блоке (706).[0079] After waking up, the full internal thread determines if there are any remaining lines in the first block (704). If the total internal stream determines that there is one or more remaining lines in the first block (“YES” 704), the full internal stream determines whether there are any remaining lines in the second block (706).
[0080] Если нет оставшихся строк во втором блоке данных ("НЕТ" 706), полный внутренний поток определяет, выполнен ли второй дочерний поток (708). Второй дочерний поток выполнен, если второй дочерний поток выдает индикацию завершения в полный внутренний поток. Если второй дочерний поток не выполнен, второй дочерний поток может вставить дополнительные строки во второй блок. Некоторые из этих строк могут быть меньше, чем наименьшая строка в первом блоке. Следовательно, если полный внутренний поток определяет, что второй дочерний поток не выполнен ("НЕТ" 708), полный внутренний поток ждет (710). В различных вариантах осуществления полный внутренний поток ждет до тех пор, пока не произойдут различные события. Например, в некоторых вариантах осуществления полный внутренний поток ждет до тех пор, пока не истечет таймер. В других вариантах осуществления полный внутренний поток ждет до тех пор, пока полный внутренний поток не примет итоговое событие. Итоговое событие может указывать, что второй поток вставил строку во второй блок или что второй поток выполнен. После того, как полный внутренний поток закончил ждать, полный внутренний поток заново определяет, включает ли второй блок в себя какие-нибудь строки (706) и так далее.[0080] If there are no remaining rows in the second data block ("NO" 706), the full internal stream determines whether the second child stream (708) has been executed. The second child thread is executed if the second child thread gives an indication of completion in the full internal thread. If the second child stream is not executed, the second child stream may insert additional rows in the second block. Some of these lines may be smaller than the smallest line in the first block. Therefore, if the full internal thread determines that the second child thread has not completed ("NO" 708), the full internal thread is waiting (710). In various embodiments, a complete internal stream waits until various events occur. For example, in some embodiments, a complete internal thread waits until a timer expires. In other embodiments, the full internal stream waits until the full internal stream receives the resulting event. The resulting event may indicate that the second thread inserted a row in the second block or that the second thread has completed. After the full internal thread has finished waiting, the full internal thread will again determine if the second block includes any rows (706) and so on.
[0081] Если второй дочерний поток выполнен, то второй дочерний поток не будет вставлять больше строк во второй блок и во втором блоке нет оставшихся строк. Следовательно, все оставшиеся строки в первом блоке больше, чем любая строка в блоке результата. Следовательно, если полный внутренний поток определяет, что выполнен второй дочерний поток ("ДА" 708), полный внутренний поток вставляет любые оставшиеся строки в первый блок в блок результата после наибольшей строки в блоке результата (712). После вставки оставшихся строк в первом блоке в блок результата полный внутренний поток заново определяет, имеются ли какие-нибудь оставшиеся строки в первом блоке (704) и так далее.[0081] If the second child stream is executed, then the second child stream will not insert more rows in the second block and there are no remaining rows in the second block. Therefore, all remaining lines in the first block are larger than any line in the result block. Therefore, if the full internal stream determines that the second child stream has been executed ("YES" 708), the full internal stream inserts any remaining rows in the first block into the result block after the largest row in the result block (712). After inserting the remaining lines in the first block into the result block, the full internal stream re-determines whether there are any remaining lines in the first block (704) and so on.
[0082] Если полный внутренний поток определяет, что имеется оставшаяся строка во втором блоке ("ДА" 706), полный внутренний поток идентифицирует минимальную строку (714). Минимальной строкой является наименьшая оставшаяся строка или в первом блоке, или во втором блоке. Полный внутренний поток затем вставляет минимальную строку в блок результата после наибольшей строки в блоке результата (716). После вставки минимальной строки в блок результата полный внутренний поток заново определяет, имеются ли какие-нибудь оставшиеся строки в первом блоке (704) и так далее.[0082] If the total internal stream determines that there is a remaining line in the second block ("YES" 706), the full internal stream identifies the minimum line (714). The smallest row is the smallest remaining row in either the first block or the second block. The full internal stream then inserts the minimum row in the result block after the largest row in the result block (716). After inserting the minimum row in the result block, the full internal stream re-determines whether there are any remaining rows in the first block (704), and so on.
[0083] Если нет оставшихся строк в первом блоке ("НЕТ" 704), полный внутренний поток определяет, выполнен ли первый дочерний поток (718). Первый дочерний поток выполнен, когда первый дочерний поток выдал индикацию завершения полному внутреннему потоку. Если первый дочерний поток еще не выполнен, первый дочерний поток может продолжить вставлять строки в первый блок. Следовательно, если первый дочерний поток не выполнен ("НЕТ" 718), полный внутренний поток ждет (720). В различных вариантах осуществления полный внутренний поток ждет до тех пор, пока не произойдут различные события. Например, в некоторых вариантах осуществления, полный внутренний поток ждет до тех пор, пока не истечет таймер. В других вариантах осуществления полный внутренний поток ждет до тех пор, пока не произойдет итоговое событие. Итоговое событие может быть вставкой строки в первый блок, индикацией завершения от первого дочернего потока или другим типом события.[0083] If there are no remaining lines in the first block ("NO" 704), the full internal thread determines whether the first child thread (718) is executed. The first child thread is executed when the first child thread gives an indication of completion to the full internal thread. If the first child thread has not yet completed, the first child thread may continue to insert rows in the first block. Therefore, if the first child thread is not executed ("NO" 718), the full internal thread is waiting (720). In various embodiments, a complete internal stream waits until various events occur. For example, in some embodiments, a full internal thread waits until the timer expires. In other embodiments, a complete internal stream waits until a final event occurs. The resulting event may be an insertion of a row into the first block, an indication of completion from the first child stream, or another type of event.
[0084] Если первый дочерний поток выполнен ("ДА" 718), полный внутренний поток определяет, имеются ли какие-нибудь оставшиеся строки во втором блоке (722). Если имеются одна или более оставшихся строк во втором блоке ("ДА" 722), полный внутренний поток вставляет любые оставшиеся строки во втором блоке в блок результата после наибольшей строки в блоке результата (724). Полный внутренний поток может вставлять оставшиеся строки во втором блоке в блок результата, так как первый дочерний поток не будет добавлять больше строк в первый блок, и все строки в первом блоке были добавлены в блок результата. Следовательно, любые оставшиеся строки во втором блоке являются большими, чем наибольшая строка в блоке результата.[0084] If the first child thread is executed ("YES" 718), the full internal thread determines if there are any remaining rows in the second block (722). If there is one or more remaining rows in the second block ("YES" 722), the full internal stream inserts any remaining rows in the second block into the result block after the largest row in the result block (724). A full internal thread can insert the remaining rows in the second block into the result block, since the first child stream will not add more rows to the first block, and all rows in the first block were added to the result block. Therefore, any remaining lines in the second block are larger than the largest line in the result block.
[0085] После вставки любых оставшихся строк во втором блоке в блок результата или после определения, что нет оставшихся строк во втором блоке ("НЕТ" 722), полный внутренний поток определяет, выполнен ли второй дочерний поток (726). Если полный внутренний поток определяет, что второй поток не выполнен ("НЕТ" 712), полный внутренний поток ждет (728). После того, как полный внутренний поток завершил ожидание, полный внутренний поток снова определяет, имеются ли какие-нибудь оставшиеся строки во втором блоке (722) и так далее.[0085] After inserting any remaining rows in the second block into the result block or after determining that there are no remaining rows in the second block ("NO" 722), the full internal stream determines whether the second child stream (726) has been executed. If the full internal thread determines that the second thread has not completed ("NO" 712), the full internal thread is waiting (728). After the full internal thread completes the wait, the full internal thread again determines if there are any remaining rows in the second block (722) and so on.
[0086] Если полный внутренний поток определяет, что второй дочерний поток выполнен ("ДА" 726), полный внутренний поток определяет, является ли полный внутренний поток корневым потоком (730). Если полный внутренний поток является корневым потоком ("ДА" 730), полный внутренний поток выдает индикацию завершения приложению 108 (732) электронной таблицы. Если полный внутренний поток не является корневым потоком ("НЕТ" 730), полный внутренний поток выдает индикацию завершения в родительский поток полного внутреннего потока (734). После или выдачи индикации завершения в приложение электронной 108 таблицы или родительский поток полного внутреннего потока полный внутренний поток переходит в режим сна (736).[0086] If the full internal stream determines that the second child stream has completed ("YES" 726), the full internal stream determines whether the full internal stream is the root stream (730). If the full internal stream is the root stream ("YES" 730), the full internal stream gives an indication of completion of the spreadsheet application 108 (732). If the full internal thread is not the root thread ("NO" 730), the full internal thread gives an indication of completion to the parent thread of the full internal thread (734). After either issuing the completion indication to the application, the
[0087] Фиг. 8 является последовательностью операций, иллюстрирующей примерную операцию 800, выполненную потоком управления памятью во время фазы объединения процесса обработки. Некоторые варианты осуществления используют способ управления памятью, который включает два буфера. В таких вариантах осуществления каждый из сортированных блоков, сгенерированных во время фазы сортировки блока, хранится в первом буфере. Например, блоки 414, 416, 418, 420, 422, 424 и 426, иллюстрированные в примере фиг. 4, хранятся в первом буфере. Когда листовые потоки генерируют блоки результата, эти листовые потоки считывают из первого буфера и сохраняют свои блоки результата во втором буфере. Например, потоки 408, 410 и 412, иллюстрированные в примере на фиг. 4, сохраняют свои блоки результата во втором буфере. Внутренние потоки в первом уровне выше листовых потоков считывают строки из второго буфера и сохраняют свои блоки результата обратно в первый буфер. Например, потоки 404 и 406, иллюстрированные в примере на фиг. 4, считывают из второго буфера и сохраняют свои блоки результата в первом буфере. Внутренние потоки во втором уровне выше листовых потоков считывают строки из первого буфера, и блоки результата сохраняют обратно во второй буфер. Например, поток 402, иллюстрированный в примере на фиг. 4, считывает из первого буфера и сохраняет его блоки результата во втором буфере. Это продолжается для прогрессивно более высоких уровней в иерархии потоков. При некоторых обстоятельствах этот способ управления памятью может быть более эффективным, чем распределение блоков памяти для индивидуальных блоков результата.[0087] FIG. 8 is a flowchart illustrating an
[0088] В некоторых вариантах осуществления, использующих этот способ управления памятью, приложение 108 электронной таблицы ждет, что блок конечного результата будет в первом буфере. Однако в некоторых случаях блок конечного результата находится во втором буфере, а не в первом буфере. Кроме того, в некоторых вариантах осуществления, использующих этот способ управления памятью, все потоки объединения в заданном уровне ожидают считывания из одного и того же буфера и сохраняют блоки результата в одном и том же буфере. Однако неполный внутренний поток считывает блок, произведенный листовыми потоками (то есть блок во втором буфере), и блок, сгенерированный во время фазы сортировки блока (то есть блок в первом буфере). Поток управления памятью выполняет операцию 800 для исправления этих проблем.[0088] In some embodiments using this memory management method, the
[0089] Как иллюстрировано в примере на фиг. 8, операция 800 начинается, когда поток управления памятью разбужен приложением (802) электронной таблицы. После пробуждения поток управления памятью определяет, имеется ли нечетное число сортированных блоков, сгенерированных во время фазы (804) сортировки блока процесса сортировки. Если имеется нечетное число блоков в первом буфере, иерархия потоков включает в себя неполный внутренний поток. Следовательно, если имеется нечетное число блоков в первом буфере ("ДА" 804), поток управления памятью копирует во второй буфер блок, назначенный на неполный внутренний поток (806). Таким образом, блок готов к использованию неполным внутренним потоком.[0089] As illustrated in the example of FIG. 8,
[0090] После копирования блока во второй буфер или после определения того, что нет нечетного числа блоков, сгенерированных в фазе сортировки блока процесса сортировки ("НЕТ" 804), поток управления памятью определяет, является ли блок конечного результата завершенным (808). Если блок конечного результата не является завершенным ("НЕТ" 808), поток управления памятью ждет (810). В различных вариантах осуществления поток управления памятью ждет до тех пор, пока не произойдут различные события. Например, в некоторых вариантах осуществления, поток управления памятью ждет до тех пор, пока не истечет таймер. В других вариантах осуществления поток управления памятью ждет до тех пор, пока корневой поток не обеспечит индикацию завершения приложению 108 электронной таблицы. После того, как поток управления памятью завершает ожидание, поток управления памятью снова определяет, является ли блок конечного результата завершенным (808).[0090] After copying a block to a second buffer or after determining that there are no odd number of blocks generated in the sort phase of the block of the sorting process ("NO" 804), the memory control flow determines whether the block of the final result is complete (808). If the end result block is not complete ("NO" 808), the memory control thread is waiting (810). In various embodiments, a memory control flow waits until various events occur. For example, in some embodiments, the memory management thread waits until the timer expires. In other embodiments, a memory management thread waits until the root thread provides an indication of completion of the
[0091] Если блок конечного результата является завершенным ("ДА" 808), поток управления памятью определяет, находится ли блок конечного результата во втором буфере (812). Если блок конечного результата находится во втором буфере ("ДА" 812), поток управления памятью копирует блок конечного результата в первый буфер (814). После копирования блока конечного результата в первый буфер или после определения того, что блок конечного результата уже находится в первом буфере ("НЕТ" 812), поток управления памятью (816) переходит в режим сна.[0091] If the end result block is completed ("YES" 808), the memory control flow determines whether the end result block is in the second buffer (812). If the end result block is in the second buffer ("YES" 812), the memory management thread copies the end result block to the first buffer (814). After copying the block of the final result into the first buffer or after determining that the block of the final result is already in the first buffer ("NO" 812), the memory control stream (816) goes into sleep mode.
[0092] Фиг. 9 является блок-схемой, иллюстрирующей примерное вычислительное устройство 900. В некоторых вариантах осуществления вычислительная система 100 реализуется, используя одно или более вычислительных устройств, таких как вычислительное устройство 900. Должно быть оценено, что в других вариантах осуществления вычислительная система 100 реализуется, используя вычислительные устройства, имеющие компоненты аппаратного обеспечения, отличные от иллюстрированных в примере на фиг. 9.[0092] FIG. 9 is a block diagram illustrating an
[0093] В различных вариантах осуществления вычислительные устройства реализуются по-разному. Например, в примере на фиг. 9 вычислительное устройство 900 содержит память 902, систему 904 обработки, вторичное устройство 906 хранения, карту 908 интерфейса сети, видеоинтерфейс 910, устройство 912 отображения, интерфейс 914 внешних компонентов, внешнее устройство 916 хранения, устройство 918 ввода, принтер 920 и носитель 922 связи. В других вариантах осуществления вычислительные устройства реализуются, используя больше или меньше компонентов аппаратного обеспечения. Например, в другом примерном варианте осуществления, вычислительное устройство не включает в себя видеоинтерфейс, устройство отображения, внешнее устройство хранения или устройство ввода.[0093] In various embodiments, computing devices are implemented in different ways. For example, in the example of FIG. 9,
[0094] Память 902 включает в себя один или более считываемых компьютером носителей данных, способных хранить данные и/или команды. Как используется в этом документе, считываемым компьютером носителем данных является устройство или продукт изготовления, который хранит данные и/или команды программного обеспечения, считываемые вычислительным устройством. В различных вариантах осуществления память 902 реализуется по-разному. Например, в различных вариантах осуществления память 902 реализуется, используя различные типы считываемых компьютером носителей данных. Примерные типы считываемых компьютером носителей данных включают в себя, но не ограничиваются ими, динамическую память произвольного доступа (DRAM), синхронную динамическую память произвольного доступа с двойной скоростью передачи данных (DDR SDRAM), DRAM с уменьшенным временем ожидания, DDR2 SDRAM, DDR3 SDRAM, RAM Rambus, полупроводниковую память, флэш-память, постоянное запоминающее устройство (ROM), электрически-стираемое программируемое ROM и другие типы устройств и/или продуктов изготовления, которые сохраняют данные.[0094]
[0095] Система 904 обработки включает в себя одну или более физических интегральных схем, которые выборочно выполняют команды программного обеспечения. В различных вариантах осуществления система 904 обработки реализуется различными способами. Например, в одном примерном варианте осуществления система 904 обработки реализуется в качестве одного или более ядер обработки. Например, в этом примерном варианте осуществления система 904 обработки может быть реализована в качестве одного или более микропроцессоров Intel Core 2. В другом примерном варианте осуществления система 904 обработки реализуется в качестве одного или более отдельных микропроцессоров. В еще одном примерном варианте осуществления система 904 обработки реализуется в качестве ASIC, которая предоставляет специальные функциональные возможности. В еще одном примерном варианте осуществления система 904 обработки предоставляет специальные функциональные возможности при использовании ASIC и посредством выполнения команд программного обеспечения.[0095] The
[0096] В различных вариантах осуществления система 904 обработки выполняет команды программного обеспечения в различных наборах команд. Например, в различных вариантах осуществления система 904 обработки выполняет команды программного обеспечения в наборах команд, таких как набор команд x86, набор команд POWER, набор команд RISC, набор команд SPARC, набор команд IA-64, набор команд MIPS и/или другие наборы команд.[0096] In various embodiments, the
[0097] Вторичное устройство 906 хранения включает в себя один или более считываемых компьютером носителей данных. Вторичное устройство 906 хранения хранит данные и команды программного обеспечения, непосредственно не доступные системе 904 обработки. Другими словами, система 904 обработки выполняет операцию ввода/вывода для извлечения данных и/или команд программного обеспечения из вторичного устройства 906 хранения. В различных вариантах осуществления вторичное устройство 906 хранения реализовано различными типами считываемых компьютером носителей данных. Например, вторичное устройство 906 хранения может быть реализовано одним или более магнитными дисками, устройствами на магнитных лентах, дисками CD-ROM, дисками ROM DVD, дисками Blu-Ray, устройствами памяти полупроводника, накопителями Бернулли и/или другими типами считываемых компьютером носителей данных.[0097] The
[0098] Карта 908 интерфейса сети позволяет вычислительному устройству 900 посылать данные и принимать данные от компьютерной сети связи. В различных вариантах осуществления карта 908 интерфейса сети реализуется по-разному. Например, в различных вариантах осуществления карта 908 интерфейса сети реализуется в качестве интерфейса Ethernet, кольцевой сети с маркерным доступом, волоконно-оптического интерфейса сети, беспроводного интерфейса сети (например, WiFi, WiMax и т.д.) или другого типа интерфейса сети.[0098] The network interface card 908 allows the
[0099] Видеоинтерфейс 910 позволяет вычислительному устройству 900 выводить видеоинформацию в устройство 912 отображения. В различных вариантах осуществления видеоинтерфейс 910 реализуется по-разному. Например, в одном примерном варианте осуществления видеоинтерфейс 910 интегрируется в материнскую плату вычислительного устройства 900. В другом примерном варианте осуществления видеоинтерфейс 910 является видеокартой расширения. Примерные типы видеокарт расширения включают в себя графические карты Radeon, произведенные ATI Technologies, Inc Markham, Ontario, графические карты Geforce, произведенные Корпорацией Nvidia, Santa Clara, California, и другие типы графических карт.[0099]
[0100] В различных вариантах осуществления устройство 912 отображения реализуется в качестве различных типов устройств отображения. Примерные типы устройств отображения включают в себя, но не ограничиваются ими, дисплеи на электронно-лучевой трубке, панели отображения LCD, плазменные панели отображения, чувствительные к прикосновению панели отображения, экраны LED, проекторы и другие типы устройств отображения. В различных вариантах осуществления видеоинтерфейс 910 связывается с устройством 912 отображения различными способами. Например, в различных вариантах осуществления видеоинтерфейс 910 связывается с устройством 912 отображения с помощью разъема универсальной последовательной шины (USB), разъема VGA, разъема цифрового визуального интерфейса (DVI), разъема S-видео, разъема мультимедийного интерфейса высокого разрешения (HDMI), разъема DisplayPort или других типов разъемов.[0100] In various embodiments, the
[0101] Интерфейс 914 внешних компонентов позволяет вычислительному устройству 900 связываться с внешними устройствами. В различных вариантах осуществления интерфейс 914 внешних компонентов реализуется по-разному. Например, в одном примерном варианте осуществления интерфейс 914 внешних компонентов является интерфейсом USB. В других примерных вариантах осуществления вычислительное устройство 900 является интерфейсом FireWire, интерфейсом последовательного порта, интерфейсом параллельного порта, интерфейсом PS/2 и/или другим типом интерфейса, который позволяет вычислительному устройству 900 связываться с внешними компонентами.[0101] The external component interface 914 allows the
[0102] В различных вариантах осуществления интерфейс 914 внешних компонентов позволяет вычислительному устройству 900 связываться с различными внешними компонентами. Например, в примере на фиг. 9 интерфейс 914 внешних компонентов позволяет вычислительному устройству 900 связываться с внешним устройством хранения 916, устройством 918 ввода и принтером 920. В других вариантах осуществления интерфейс 914 внешних компонентов позволяет вычислительному устройству 900 связываться с большим или меньшим количеством внешних компонентов. Другие примерные типы внешних компонентов включают в себя, но не ограничиваются ими, динамики, разъемы для заряда телефонов, модемы, установочные модули медиаплеера, другие вычислительные устройства, сканеры, цифровые камеры, устройства считывания отпечатков пальцев и другие устройства, которые могут быть связаны с вычислительным устройством 900.[0102] In various embodiments, the external component interface 914 allows the
[0103] Внешнее устройство 916 хранения является внешним компонентом, содержащим один или более считываемых компьютером носителей данных. Различные реализации вычислительного устройства 900 связываются с различными типами внешних устройств хранения. Примерные типы внешних устройств хранения включают в себя, но не ограничиваются ими, устройства на магнитной ленте, модули флэш-памяти, магнитные накопители, оптические накопители, блоки флэш-памяти, на дисках zip, оптические музыкальные проигрыватели и другие типы устройств, содержащих один или более считываемых компьютером носителей данных. Устройство ввода 918 является внешним компонентом, который обеспечивает пользовательский ввод в вычислительное устройство 900. Различные реализации вычислительного устройства 900 связываются с различными типами устройств ввода. Примерные типы устройств ввода включают в себя, но не ограничиваются ими, клавиатуры, мыши, трекболы, устройства ввода пером, вспомогательные клавиатуры, микрофоны, джойстики, реагирующие на прикосновение дисплеи, и другие типы устройств, которые предоставляют пользовательский ввод в вычислительное устройство 900. Принтер 920 является внешним устройством, которое печатает данные на бумаге. Различные реализации вычислительного устройства 900 связываются с различными типами принтеров. Примерные типы принтеров включают в себя, но не ограничиваются ими, лазерные принтеры, струйные принтеры, принтеры для печати фотографий, копировальные машины, факсы, принтеры квитанций, матричные принтеры или другие типы устройств, которые печатают данные на бумаге.[0103] The
[0104] Носитель 922 связи предоставляет связь между компонентами аппаратного обеспечения вычислительного устройства 900. В различных вариантах осуществления носитель 922 связи предоставляет связь между различными компонентами вычислительного устройства 900. Например, в примере на фиг. 9 носитель 922 связи облегчает связь между памятью 902, системой 904 обработки, вторичным устройством 906 хранения, картой 908 интерфейса сети, видео 910 интерфейсом и интерфейсом 914 внешних компонентов. В различных реализациях вычислительного устройства 900 носитель 922 связи реализуется по-разному. Например, в различных реализациях вычислительного устройства 900 носитель 922 связи может быть реализован в качестве шины PCI, шины PCI Express, шины ускоренного графического порта (AGP), соединительного провода Infiniband, соединительного провода интерфейса для подключения внешних устройств, интерфейса ATA (ATA) соединительного провода параллельного ATA, оптоволоконного соединительного провода, шины USB, интерфейса малых вычислительных систем (SCSI) или другого типа носителя связи.[0104]
[0105] Память 902 хранит различные типы данных и/или команд программного обеспечения. Например, в примере на фиг. 9 память 902 хранит базовую систему ввода/вывода (BIOS) 924, операционную 926 систему, программное обеспечение 928 приложения и данные 930 программы. BIOS 924 включает в себя набор команд программного обеспечения, который при выполнении системой 904 обработки вынуждает вычислительное устройство 900 загружаться для работы. Операционная система 926 включает в себя набор команд программного обеспечения, который при выполнении системой 904 обработки вынуждает вычислительное устройство 900 предоставлять операционную систему, которая координирует действия и совместное использование ресурсов вычислительного устройства 900. Типы примерных операционных систем включают в себя, но не ограничиваются ими, Windows Microsoft (R), Linux, Unix, Apple OS X, Apple OS X iPhone, Palm webOS, Palm OS, Google Chrome OS, Google Android OS и так далее. Прикладное программное обеспечение 928 включает в себя набор команд программного обеспечения, который при выполнении системой 904 обработки вынуждает вычислительное устройство 900 предоставлять приложения пользователю вычислительного устройства 900. Данные программы 930 являются данными, генерируемыми и/или используемыми прикладным программным обеспечением 928.[0105]
[0106] Различные варианты осуществления, описанные выше, предоставляются только посредством иллюстрации и не должны рассматриваться как ограничивающие. Специалисты в данной области техники легко распознают различные модификации и изменения, которые могут быть применены без следующих примерных вариантов осуществления и приложений, иллюстрированных и описанных в настоящем описании. Например, операции, показанные на чертежах, являются просто примерами. В различных вариантах осуществления подобные операции могут включать в себя больше или меньше этапов, чем показаны на чертежах. Кроме того, в других вариантах осуществления аналогичные операции могут включать в себя этапы операций, показанные на чертежах в другом порядке.[0106] The various embodiments described above are provided by way of illustration only and should not be construed as limiting. Specialists in the art will easily recognize various modifications and changes that can be applied without the following exemplary embodiments and applications, illustrated and described in the present description. For example, the operations shown in the drawings are merely examples. In various embodiments, such operations may include more or fewer steps than shown in the drawings. In addition, in other embodiments, similar operations may include the steps of operations shown in the drawings in a different order.
Claims (15)
разделение элементов данных в электронной таблице на множество блоков;
использование множества потоков для сортировки элементов данных в упомянутых блоках;
после сортировки элементов данных в блоках использование посредством вычислительной системы множества потоков объединения для генерирования блока конечного результата, причем блок конечного результата содержит каждый из элементов данных в электронной таблице, каждый из потоков объединения является потоком, который объединяет два исходных блока для генерирования блока результата, каждый из исходных блоков является или одним из сортированных блоков, или одним из блоков результата, сгенерированных другим потоком объединения; и
отображение сортированной версии электронной таблицы, причем элементы данных в сортированной версии электронной таблицы упорядочены в соответствии с порядком элементов данных в блоке конечного результата.1. A method for sorting data in a spreadsheet, comprising:
division of data elements in a spreadsheet into many blocks;
using multiple streams to sort data items in said blocks;
after sorting the data elements in the blocks, using a computer system, a plurality of combining streams to generate a block of the final result, and the final result block contains each of the data elements in the spreadsheet, each of the combining streams is a stream that combines two source blocks to generate a block of the result, each from the source blocks is either one of the sorted blocks, or one of the result blocks generated by another union stream; and
displaying a sorted version of the spreadsheet, wherein the data elements in the sorted version of the spreadsheet are ordered according to the order of the data elements in the end result block.
в котором количество блоков в упомянутом множестве блоков равно упомянутому подходящему количеству блоков, и
в котором количество элементов данных в каждом из блоков приблизительно равно.2. The method of claim 1, further comprising: determining a suitable number of blocks based on the minimum job size and the number of processing blocks in the processing system,
in which the number of blocks in said plurality of blocks is equal to said suitable number of blocks, and
in which the number of data elements in each of the blocks is approximately equal.
определение посредством вычислительной системы, превышает ли количество элементов данных в электронной таблице нижний предел; и
использование единственного потока для генерирования блока конечного результата, когда количество элементов данных в электронной таблице не превышает нижний предел.3. The method of claim 1, further comprising:
determining by means of a computing system whether the number of data elements in the spreadsheet exceeds the lower limit; and
using a single stream to generate a block of the final result when the number of data elements in the spreadsheet does not exceed the lower limit.
в котором один из потоков объединения является неполным внутренним потоком, когда количество блоков во множестве блоков является нечетным;
в котором способ дополнительно содержит назначение одного из блоков на неполный внутренний поток; и
в котором блок результата, сгенерированный неполным внутренним потоком, содержит каждый из элементов данных в блоке результата, сгенерированном дочерним потоком неполного внутреннего потока, и блоке, назначенном на неполный внутренний поток, причем элементы данных в блоке результата, сгенерированном неполным внутренним потоком, упорядочены заданным образом.4. The method according to p. 1,
wherein one of the combining streams is an incomplete internal stream when the number of blocks in the plurality of blocks is odd;
in which the method further comprises assigning one of the blocks to an incomplete internal stream; and
in which the result block generated by the incomplete internal stream contains each of the data elements in the result block generated by the child stream of the incomplete internal stream and the block assigned to the incomplete internal stream, wherein the data elements in the result block generated by the incomplete internal stream are ordered in the specified way .
определение, имеются ли какие-нибудь оставшиеся элементы данных в первом блоке, причем первый блок является блоком результата, сгенерированным дочерним потоком неполного внутреннего потока;
выполнение следующих действий, когда имеется один или более оставшихся элементов данных в первом блоке:
определение, имеются ли какие-нибудь оставшиеся элементы данных во втором блоке, причем второй блок назначается на неполный внутренний поток;
выполнение следующих действий, когда имеется один или более оставшихся элементов данных во втором блоке:
идентификацию минимального элемента данных, причем минимальный элемент данных является наименьшим из оставшихся элементов данных в первом блоке и втором блоке; вставку минимального элемента данных в блок результата после наибольшего элемента данных в блоке результата, сгенерированном неполным внутренним потоком; и вставку, когда нет оставшихся элементов данных во втором блоке, любых оставшихся элементов данных в первом блоке, в блок результата, сгенерированный неполным внутренним потоком после наибольшего элемента данных в блоке результата, сгенерированном неполным внутренним потоком;
определение, когда нет оставшихся элементов данных во втором блоке, выполнен ли дочерний поток;
ожидание, когда дочерний поток не выполнен, до тех пор, пока дочерний поток не добавит другой элемент данных во второй блок; и
вставку, когда дочерний поток выполнен, любых оставшихся элементов данных во втором блоке в блок результата, сгенерированный неполным внутренним потоком, после наибольшего элемента данных в блоке результата, сгенерированном неполным внутренним потоком.5. The method according to p. 4, in which the incomplete internal stream performs at least the following actions:
determining whether there are any remaining data items in the first block, the first block being a result block generated by a child stream of an incomplete internal stream;
performing the following actions when there is one or more remaining data elements in the first block:
determining if there are any remaining data items in the second block, the second block being allocated to an incomplete internal stream;
performing the following actions when there is one or more remaining data elements in the second block:
identification of the minimum data element, the minimum data element being the smallest of the remaining data elements in the first block and second block; inserting a minimum data element in the result block after the largest data element in the result block generated by an incomplete internal stream; and inserting, when there are no remaining data elements in the second block, any remaining data elements in the first block, into the result block generated by the incomplete internal stream after the largest data element in the result block generated by the incomplete internal stream;
determining when there are no remaining data elements in the second block, whether the child thread is executed;
Waiting for the child thread to fail until the child thread adds another data item to the second block; and
insert, when the child stream is executed, any remaining data elements in the second block into the result block generated by the incomplete internal stream, after the largest data element in the result block generated by the incomplete internal stream.
определение, имеются ли какие-нибудь оставшиеся элементы данных в первом блоке, назначенном на листовой поток, причем первый блок является одним из сортированных блоков;
выполнение следующих действий, когда имеется один или более элементов данных в первом блоке:
определение, имеются ли какие-нибудь оставшиеся элементы данных во втором блоке, назначенном на листовой поток, причем второй блок является другим одним из сортированных блоков;
выполнение следующих действий, когда имеется один или более элементов данных во втором блоке:
идентификацию минимального элемента данных, причем минимальный элемент данных является наименьшим из оставшихся элементов данных в первом блоке и втором блоке, и вставку минимального элемента данных в блок результата, сгенерированный листовым потоком после наибольшего элемента данных в блоке результата;
вставку, когда нет оставшихся элементов данных во втором блоке, любых оставшихся элементов данных в первом блоке в блок результата, сгенерированный листовым потоком, после наибольшего элемента данных в блоке результата, сгенерированном листовым потоком; и
вставку, когда нет оставшихся элементов данных в первом блоке, любых оставшихся элементов данных во втором блоке в блок результата после наибольшего элемента данных в блоке результата, сгенерированном листовым потоком.7. The method of claim 1, wherein the combining streams include a leaf stream that performs the following actions:
determining whether there are any remaining data items in the first block assigned to the sheet stream, the first block being one of the sorted blocks;
performing the following actions when there is one or more data elements in the first block:
determining if there are any remaining data items in the second block assigned to the sheet stream, the second block being another one of the sorted blocks;
performing the following actions when there is one or more data elements in the second block:
identification of the minimum data element, the minimum data element being the smallest of the remaining data elements in the first block and the second block, and inserting the minimum data element into the result block generated by the leaf stream after the largest data element in the result block;
insertion, when there are no remaining data elements in the second block, any remaining data elements in the first block in the result block generated by the sheet stream, after the largest data element in the result block generated by the sheet stream; and
insert, when there are no remaining data elements in the first block, any remaining data elements in the second block in the result block after the largest data element in the result block generated by the sheet stream.
определение, является ли наибольший элемент данных в первом блоке меньшим, чем наименьший элемент данных во втором блоке;
выполнение, когда наибольший элемент данных в первом блоке является меньшим, чем наименьший элемент данных во втором блоке, по меньшей мере, следующих действий без сравнения дополнительных элементов данных в первом блоке и втором блоке:
вставку элементов данных в первом блоке в блок результата, сгенерированный листовым потоком; и вставку элементов данных во втором блоке в блок результата после того как наибольший элемент данных в блоке результата сгенерирован листовым потоком;
определение, является ли наибольший элемент данных во втором блоке меньшим, чем наименьший элемент данных в первом блоке; и
выполнение, когда наибольший элемент данных во втором блоке является меньшим, чем наименьший элемент данных в первом блоке, по меньшей мере, следующих действий без сравнения дополнительных элементов данных в первом блоке и втором блоке:
вставку элементов данных во втором блоке в блок результата, сгенерированный листовым потоком, и вставку элементов данных в первом блоке в блок результата после наибольшего элемента данных в блоке результата, сгенерированном листовым потоком.8. The method according to p. 7, in which the sheet stream performs the following actions in response to awakening:
determining whether the largest data element in the first block is smaller than the smallest data element in the second block;
performing when the largest data element in the first block is smaller than the smallest data element in the second block of at least the following actions without comparing additional data elements in the first block and second block:
inserting data elements in the first block into the result block generated by the sheet stream; and inserting data elements in the second block into the result block after the largest data element in the result block is generated by the leaf stream;
determining whether the largest data element in the second block is smaller than the smallest data element in the first block; and
performing when the largest data element in the second block is smaller than the smallest data element in the first block of at least the following actions without comparing additional data elements in the first block and second block:
inserting data elements in the second block into the result block generated by the sheet stream, and inserting data elements in the first block into the result block after the largest data element in the result block generated by the sheet stream.
систему обработки, содержащую множество блоков обработки; и систему хранения данных, содержащую считываемые компьютером команды, которые при выполнении посредством одного или более блоков обработки вынуждают вычислительную систему:
разделять элементы данных в электронной таблице на множество блоков;
использовать множество потоков сортировки блоков для сортировки элементов данных в блоках, в которых количество потоков сортировки блоков равно количеству блоков;
после того как элементы данных в блоках сортированы, использовать множественные потоки объединения для генерирования блока конечного результата, причем блок конечного результата содержит каждый из элементов данных в электронной таблице, каждый из потоков объединения является потоком, который объединяет два исходных блока для генерирования блока результата, каждый из исходных блоков является или одним из сортированных блоков или одним из блоков результата, сгенерированным другим потоком объединения; и
отображать сортированную версию электронной таблицы, причем элементы данных в сортированной версии электронной таблицы упорядочены в соответствии с порядком элементов данных в блоке конечного результата.10. A computing system for sorting data in a spreadsheet, containing:
a processing system comprising a plurality of processing units; and a data storage system comprising computer-readable instructions that, when executed by one or more processing units, force the computing system:
Separate data elements in a spreadsheet into multiple blocks
use multiple flows of sorting blocks to sort data elements in blocks in which the number of flows of sorting blocks is equal to the number of blocks;
after the data elements in the blocks are sorted, use multiple join streams to generate the final result block, with the final result block containing each of the data elements in the spreadsheet, each of the join flows is a stream that combines the two source blocks to generate the result block, each from the source blocks is either one of the sorted blocks or one of the result blocks generated by another union stream; and
display a sorted version of the spreadsheet, and the data elements in the sorted version of the spreadsheet are ordered in accordance with the order of the data elements in the end result block.
в которой количество блоков во множестве блоков равно упомянутому подходящему количеству блоков,
в которой количество элементов данных в каждом из блоков приблизительно равно.11. The computing system of claim 10, wherein the computer-readable instructions, when executed by one or more processing units, force the computing system to determine the appropriate number of blocks based on the minimum job size and the number of processing blocks in the processing system;
in which the number of blocks in the plurality of blocks is equal to said suitable number of blocks,
in which the number of data elements in each of the blocks is approximately equal.
определять, превышает ли количество элементов данных в электронной таблице нижний предел; и
использовать единственный поток для генерирования блока конечного результата, когда количество элементов данных в электронной таблице не превышает нижний предел.12. The computing system of claim 10, wherein the computer-readable instructions, when executed by one or more processing units, force the computing system:
determine whether the number of data elements in the spreadsheet exceeds the lower limit; and
use a single stream to generate a block of the final result when the number of data elements in the spreadsheet does not exceed the lower limit.
в которой потоки объединения включают в себя неполный внутренний поток, когда количество блоков во множестве блоков является нечетным;
в которой считываемые компьютером команды при выполнении одним или более блоками обработки дополнительно вынуждают вычислительную систему назначать один из упомянутых блоков на неполный внутренний поток; и
в которой неполный внутренний поток генерирует блок результата, который содержит каждый из элементов данных в блоке результата, сгенерированном дочерним потоком неполного внутреннего потока, и блоке, назначенном на неполный внутренний поток, причем элементы данных в блоке результата, сгенерированном неполным внутренним потоком, упорядочены заданным образом, при этом дочерний поток является другим одним из потоков объединения.13. The computing system of claim 10,
wherein the combining streams include an incomplete internal stream when the number of blocks in the plurality of blocks is odd;
in which computer-readable instructions when executed by one or more processing units additionally force the computing system to assign one of said blocks to an incomplete internal stream; and
in which the incomplete internal stream generates a result block that contains each of the data elements in the result block generated by the child stream of the incomplete internal stream and the block assigned to the incomplete internal stream, wherein the data elements in the result block generated by the incomplete internal stream are ordered in a specified way , while the child thread is another one of the pool threads.
определять, превышает ли количество строк в сводной таблице нижний предел;
использовать единственный поток для генерирования блока конечного результата, когда количество строк в сводной таблице не превышает нижний предел, причем блок конечного результата содержит каждую из строк в сводной таблице, строки упорядочены заданным образом в блоке конечного результата;
выполнять следующие действия, когда количество строк в сводной таблице превышает нижний предел:
определять подходящее количество блоков на основании количества строк в сводной таблице и количества блоков обработки в системе обработки, разделять строки в сводной таблице на множество блоков, при этом количество блоков в упомянутом множестве блоков равно этому подходящему количеству блоков, причем количество строк в каждом из блоков приблизительно равно; использовать множество потоков сортировки блока для сортировки блоков таким образом, чтобы строки в блоках были упорядочены заданным образом;
генерировать дерево потоков, причем дерево потоков содержит множество потоков объединения;
назначать два из блоков на каждый листовой поток в дереве потоков; и пробуждать каждый поток объединения в наборе потоков объединения,
при этом каждый листовой поток в дереве потоков генерирует блок результата, который содержит каждую из строк в блоках, назначенных на листовой поток, причем строки в блоке результата, сгенерированном листовым потоком, упорядочены заданным образом, при этом каждый полный внутренний поток в дереве потоков генерирует блок результата, который содержит каждую из строк в блоках результата, сгенерированных дочерними потоками полного внутреннего потока, строки в блоке результата, сгенерированном полным внутренним потоком, упорядочены заданным образом;
причем блоком конечного результата является блок результата, сгенерированный корневым потоком в дереве потоков, при этом корневой поток является потоком, не имеющим родительских потоков в дереве потоков; и
отображать сортированную версию электронной таблицы, причем элементы данных в сортированной версии электронной таблицы упорядочены в соответствии с порядком элементов данных в блоке конечного результата. 15. A computer-readable storage medium having computer-readable instructions stored on it, the computer-readable instructions being executed by one or more processing units in a processing system of a computing system to sort data in a spreadsheet, forcing the computing system to:
determine whether the number of rows in the pivot table exceeds the lower limit;
use a single stream to generate a block of the final result when the number of rows in the pivot table does not exceed the lower limit, and the block of the final result contains each of the rows in the pivot table, the rows are ordered in the specified way in the block of the final result;
Perform the following when the number of rows in the pivot table exceeds the lower limit:
determine the appropriate number of blocks based on the number of rows in the pivot table and the number of processing blocks in the processing system, divide the rows in the pivot table into many blocks, while the number of blocks in the said many blocks is equal to this suitable number of blocks, and the number of rows in each block is approximately equally; Use multiple block sort threads to sort the blocks so that the rows in the blocks are ordered in the specified way.
generate a stream tree, wherein the stream tree contains a plurality of join threads;
Assign two of the blocks to each sheet stream in the stream tree and wake up each join stream in the set of join threads,
in this case, each leaf stream in the stream tree generates a result block that contains each of the rows in blocks assigned to the leaf stream, and the rows in the result block generated by the leaf stream are ordered in a specified way, while each complete internal stream in the stream tree generates a block the result, which contains each of the rows in the result blocks generated by the child threads of the full internal thread, the rows in the result block generated by the full internal thread, are ordered way;
wherein the end result block is the result block generated by the root thread in the thread tree, wherein the root thread is a thread that does not have parent threads in the thread tree; and
display a sorted version of the spreadsheet, and the data elements in the sorted version of the spreadsheet are ordered in accordance with the order of the data elements in the end result block.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/771,164 US8527866B2 (en) | 2010-04-30 | 2010-04-30 | Multi-threaded sort of data items in spreadsheet tables |
US12/771,164 | 2010-04-30 | ||
PCT/US2011/032495 WO2011136937A2 (en) | 2010-04-30 | 2011-04-14 | Multi-threaded sort of data items in spreadsheet tables |
Publications (2)
Publication Number | Publication Date |
---|---|
RU2012145666A RU2012145666A (en) | 2014-04-27 |
RU2574833C2 true RU2574833C2 (en) | 2016-02-10 |
Family
ID=
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2770174C2 (en) * | 2016-05-17 | 2022-04-14 | Керквест | Method for improved authentication of material object |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5307485A (en) * | 1991-05-31 | 1994-04-26 | International Business Machines Corporation | Method and apparatus for merging sorted lists in a multiprocessor shared memory system |
US6626959B1 (en) * | 1999-06-14 | 2003-09-30 | Microsoft Corporation | Automatic formatting of pivot table reports within a spreadsheet |
RU2383923C2 (en) * | 2004-09-30 | 2010-03-10 | Майкрософт Корпорейшн | Designing functions of electronic work sheets for working with data tables |
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5307485A (en) * | 1991-05-31 | 1994-04-26 | International Business Machines Corporation | Method and apparatus for merging sorted lists in a multiprocessor shared memory system |
US6626959B1 (en) * | 1999-06-14 | 2003-09-30 | Microsoft Corporation | Automatic formatting of pivot table reports within a spreadsheet |
RU2383923C2 (en) * | 2004-09-30 | 2010-03-10 | Майкрософт Корпорейшн | Designing functions of electronic work sheets for working with data tables |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2770174C2 (en) * | 2016-05-17 | 2022-04-14 | Керквест | Method for improved authentication of material object |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2011245662B2 (en) | Multi-threaded sort of data items in spreadsheet tables | |
US20110276868A1 (en) | Multi-Threaded Adjustment of Column Widths or Row Heights | |
US8555161B2 (en) | Concurrent editing of a document by multiple clients | |
US9652440B2 (en) | Concurrent utilization of a document by multiple threads | |
US10592672B2 (en) | Testing insecure computing environments using random data sets generated from characterizations of real data sets | |
WO2013062877A1 (en) | Contextual gravitation of datasets and data services | |
US20130262974A1 (en) | Tabular widget with mergable cells | |
AU2011243093B2 (en) | Multi-threaded sort of data items in spreadsheet tables | |
US20080222112A1 (en) | Method and System for Document Searching and Generating to do List | |
US8782082B1 (en) | Methods and apparatus for multiple-keyword matching | |
WO2022179122A1 (en) | Big-data-based data storage method and apparatus, and electronic device and storage medium | |
RU2574833C2 (en) | Multiflow data elements sorting in electronic tables | |
US11544453B2 (en) | Method for configuring documents for circulation and device implementing method | |
WO2019042276A1 (en) | Method and device for printing relational graph | |
CN118503311B (en) | Data query method, electronic device and storage medium | |
Carballo et al. | Reducing efficiently the search tree for multiprocessor job-shop scheduling problems | |
CN116521897A (en) | Graph query method and system | |
JP2013016090A (en) | Identifier generating device, identifier generating method, and program | |
CN113950699A (en) | Impact analysis of processes for reducing undesired behavior |