УНИЧТОЖЕНИЕ ОБЪЕКТА НА ОСНОВЕ ПОСЛЕДОВАТЕЛЬНОСТИ ВЫПОЛНЯЕМЫХ ДЕЙСТВИЙ
DESTROYING AN OBJECT BASED ON THE SEQUENCE OF ACTIONS PERFORMED

Уровень техники
[0001] В области вычислений множество сценариев подразумевают устройство, хранящее набор объектов, которые типично содержат набор ресурсов объекта, таких как функции, примитивные типы данных, ссылки на другие объекты и контейнеры данных, такие как массивы, хеш-таблицы и деревья. Различные потоки, исполняющиеся в одной или более средах выполнения (например, использующие различные языки программирования, области выполнения и/или платформы), могут создавать и осуществлять доступ к объектам, включающий в себя сохранение ссылок (например, адресов памяти или описатели) на объекты, которые в настоящее время используются соответствующими потоками. К объекту могут одновременно и/или последовательно осуществлять доступ несколько потоков и/или объектов, и счетчик ссылок может быть использован для отслеживания числа ссылок на каждый объект, которые удерживаются потоками и хранятся в других объектах. В некоторых случаях, одновременный доступ к конкретному совместно используемому ресурсу может быть осуществлен посредством механизма синхронизации, который обеспечивает монопольный доступ к ресурсу объекта одному потоку в какое-либо одно время. Механизм синхронизации, такой как взаимное исключение, семафор или критическая секция, может сортировать ожидающие запросы; может предоставлять монопольный доступ к ресурсу объекта выбранному потоку, в то же время запрещая другим запрашивающим потокам доступ к объекту; и может ожидать завершения доступа выбранным потоком перед передачей монопольного доступа второму потоку с ожидающим доступа запросом.
[0002] Когда поток завершает свое использование объекта, он освобождает ссылку на него (неявно или явно), и счетчик ссылок уменьшается на единицу. Когда счетчик ссылок для объекта уменьшается до нуля, объект считается более неиспользуемым и готовым для уничтожения. Устройство может завершать ресурсы объекта для объекта и может возвращать обратно ресурсы памяти и вычислительные ресурсы, которые были зарезервированы и/или потреблялись объектом. Альтернативно, поток может явно запрашивать удаление объекта, и устройство может инициировать процесс завершения, который может включать в себя изменение каких-либо существующих ссылок на объект, которые удерживаются другими потоками и/или другими объектами.
Сущность изобретения
[0003] Это краткое изложение сущности изобретения приведено для представления в упрощенной форме подборки концепций, которые дополнительно описываются ниже в подробном описании. Данное краткое изложение сущности изобретения не имеет намерением ни то, чтобы идентифицировать ключевые факторы или важнейшие признаки заявленного изобретения, ни то, чтобы использоваться таким образом, чтобы оно ограничивало объем заявленного изобретения.
[0004] Когда поток пытается уничтожить объект, могут возникать некоторые обстоятельства, которые препятствуют потоку в завершении процесса уничтожения объекта. В качестве первого такого примера объект может включать в себя ресурс объекта, который был создан вторым потоком в другой среде выполнения, где процесс уничтожения ресурса объекта по соглашениям другой среды выполнения может не быть полностью доступным для инициирующего потока. В качестве второго такого примера, объект может включать в себя ресурс объекта, который монопольно резервируется для использования вторым потоком, таким как блокировка синхронизации, и первый поток может не иметь возможности прерывать монопольный доступ, предоставленный второму потоку, без повреждения второго потока или порождения неожиданного поведения устройства. В качестве третьего такого примера, объект может включать в себя ресурс объекта, который в настоящее время занят (например, описатель ресурса относительно ресурса, который может требовать времени для освобождения), и блокировка потока до тех пор, пока ресурс объекта не станет доступным для уничтожения, может накладывать и делать неопределенной задержку по потоку.
[0005] Когда такие обстоятельства возникают, поток может инициировать уничтожение объекта, но может быть неспособен завершать процесс уничтожения объекта. Поток может просто аварийным образом прекращать процесс, но это может оставлять объект в несогласованном состоянии, и/или частично уничтоженный объект может продолжать существовать бесконечно в качестве утечки ресурсов. Поток может пытаться уничтожать объект в более позднее время, но если некоторые задачи не могут быть выполнены потоком независимо от какого-либо времени, повторяющаяся попытка потока может представлять устойчивую и непродуктивную утечку ресурсов на устройстве. Кроме того, в некоторых случаях, уничтожение объекта может требовать участия нескольких потоков (например, различные потоки могут удерживать монопольный доступ относительно различных фрагментов объекта), так что один поток не может инициировать и также выполнять процесс уничтожения объекта. В этих обстоятельствах, неспособность потока завершать процесс уничтожения объекта может быть трудно решить несогласованным способом проб и ошибок, при отсутствии более скоординированного процесса уничтожения объекта, в котором могут участвовать различные потоки.
[0006] В виду этих обстоятельств, настоящее изобретение предоставляет способы, которые обеспечивают уничтожение объекта для объектов потоками, в частности (хотя не исключительно) в окружении с подсчетом ссылок. В соответствии с этими способами процесс уничтожения объекта может управляться посредством последовательности действий для уничтожения объекта. Поток может инициировать последовательность действий для уничтожения объекта с помощью запроса на уничтожение объекта (например, в ответ на уменьшение потоком счетчика ссылок в отношении объекта до нуля) и может вызывать последовательность действий для уничтожения объекта, чтобы инициировать уничтожение объекта. Последовательность действий для уничтожения объекта может выполнять задачи процесса уничтожения объекта для этого конкретного объекта (например, уничтожение ресурсов объекта, встроенных в объект; получение обратно памяти и других вычислительных ресурсов; и освобождение любых оставшихся ссылок на объект, удерживаемых другими потоками и объектами). Последовательность действий для уничтожения объекта может также подтверждать, что запрашивающему потоку разрешается выполнять каждую задачу процесса уничтожения объекта. Если уничтожение объекта завершается, последовательность действий для уничтожения объекта может уведомлять инициирующий поток о том, что запрос был полностью удовлетворен. Однако, если процесс уничтожения объекта заканчивается неудачей (например, поскольку инициирующий поток ограничен от выполнения, по меньшей мере, одной задачи процесса уничтожения объекта), последовательность действий для уничтожения объекта может создавать новую ссылку на объект и добавлять новую ссылку в список уничтожения объекта. Поскольку новая ссылка представляет последнюю ссылку на объект, последовательность действий уничтожения объекта может увеличивать счетчик ссылок объекта с нуля до одного, указывая, что объект в настоящее время удерживается согласно семантике подсчета ссылок. Процесс уничтожения объекта может затем уведомлять первый поток о неудаче, чтобы завершать уничтожение объекта для объекта.
[0007] В более позднее время, тот же поток, или другой поток, который также использует объект, может обнаруживать существование последней ссылки на объект в списке уничтожения объекта. Последняя ссылка может быть освобождена, чтобы уменьшать счетчик ссылок относительно объекта с единицы до нуля, побуждая последовательность действий для уничтожения объекта возобновлять процесс уничтожения объекта от имени запрашивающего потока. Второй запрос (в более позднее время и/или посредством другого потока) может предоставлять возможность последовательности действий для уничтожения объекта завершать процесс уничтожения объекта, таким образом, полностью освобождая ресурсы объекта для объекта и побуждая последовательность действий для уничтожения объекта уведомлять запрашивающий поток о завершении уничтожения объекта. Таким образом, последовательность действий для уничтожения объекта может справляться с различными сложностями процесса уничтожения объекта и может инкапсулировать процесс уничтожения объекта на основе последовательности действий, который предоставляет возможность потокам координироваться и взаимодействовать, чтобы выполнять полное уничтожение объекта, в соответствии с методиками, представленными в данном документе.
[0008] Для достижения вышеописанного и связанных с этим результатов, последующее описание и присоединенные чертежи излагают некоторые иллюстративные аспекты и реализации. Они являются показательными, но немногими различными способами, которыми один или более аспектов могут быть использованы. Другие аспекты, преимущества и новые признаки изобретения станут понятны из последующего подробного описания, когда рассматриваются вместе с присоединенными чертежами.
Краткое описание чертежей
[0009] Фиг. 1 является иллюстрацией примерного сценария, показывающего набор потоков, которые разделяют доступ, и пытаются уничтожить, к набору объектов.
[0010] Фиг. 2 является иллюстрацией примерного сценария, показывающего набор потоков, которые уничтожают объекты посредством последовательности действий для уничтожения объекта в соответствии с методиками, представленными в данном документе.
[0011] Фиг. 3 является иллюстрацией примерной последовательности действий для уничтожения объекта, которая обеспечивает уничтожение объекта от имени набора потоков в соответствии с методиками, представленными в данном документе.
[0012] Фиг. 4 является примерным сценарием, показывающим примерное устройство, использующее примерную систему, которая уничтожает объект с помощью последовательности действий для уничтожения объекта в соответствии с методиками, представленными в данном документе.
[0013] Фиг. 5 является примерным способом уничтожения объекта от имени потока с помощью последовательности действий для уничтожения объекта в соответствии с методиками, представленными в данном документе.
[0014] Фиг. 6 является иллюстрацией примерного машиночитаемого запоминающего устройства, хранящего инструкции, которые инструктируют устройству работать в соответствии с методиками, представленными в данном документе.
[0015] Фиг. 7 является иллюстрацией примерного сценария, показывающего защиту объекта, который различные потоки пытаются уничтожить через последовательность действий для уничтожения объекта в соответствии с методиками, представленными в данном документе.
[0016] Фиг. 8 является иллюстрацией примерного сценария, показывающего механизм уничтожения графа объекта посредством последовательности действий для уничтожения объекта в соответствии с методиками, представленными в данном документе.
[0017] Фиг. 9 является иллюстрацией примерного сценария, показывающего пометку объекта в качестве зомби-состояния, во время уничтожения объекта посредством последовательности действий для уничтожения объекта, в соответствии с методиками, представленными в данном документе.
[0018] Фиг. 10 является иллюстрацией примерного сценария, показывающего удержание объекта посредством последовательности действий для уничтожения объекта в соответствии с методиками, представленными в данном документе.
[0019] Фиг. 11 является иллюстрацией примерного сценария, показывающего различные механизмы, посредством которых второй поток возобновляет процесс уничтожения объекта, ранее инициированный первым потоком, в соответствии с методиками, представленными в данном документе.
[0020] Фиг. 12 является иллюстрацией примерного вычислительного окружения, в котором одно или более средств, изложенных в данном документе, могут быть реализованы.
Подробное описание изобретения
[0021] Далее описывается заявленное изобретение со ссылкой на чертежи, на которых аналогичные номера ссылок используются для того, чтобы ссылаться на аналогичные элементы во всем описании. В нижеприведенном описании, для целей пояснения, многие конкретные подробности изложены для того, чтобы обеспечивать полное понимание заявленного изобретения. Тем не менее, очевидно, что заявленное изобретение может быть применено на практике без этих конкретных деталей. В других случаях, структуры и устройства показаны в форме блок-схемы для того, чтобы облегчать описание заявленного изобретения.
[0022] A. Введение
[0023] Фиг. 1 является иллюстрацией примерного сценария 100, в котором к набору объектов 102 осуществляет доступ набор потоков 106 в вычислительном окружении, где потоки 106 пытаются уничтожать объекты 102 после использования.
[0024] В этом примерном сценарии 100 первый поток 106 выполняется в первой среде 108 выполнения (например, C-приложение, скомпилированное и исполняемое в исходном формате устройством), и второй поток 106 выполняется во второй, другой среде 108 выполнения (например,.NET-приложение, исполняемое посредством механизма выполнения.NET). Соответствующие потоки 106 могут создавать и осуществлять доступ к различным объектам 102, которые соответственно хранят набор ресурсов 104 объектов, таких как примитивные типы данных; ссылки на другие объекты 102; и/или структуры данных, такие как функции, списки, хеш-таблицы и деревья, которые содержат другие данные и/или ссылки на другие объекты 102. Потоки 106 могут участвовать в создании и обновлении объектов 102, таких как запросы 110 создания ресурсов, чтобы создавать ресурс объекта в объекте 102.
[0025] Как дополнительно показано в примерном сценарии 100 на фиг. 1, потоки 106 могут также разделять доступ к соответствующим объектам 102. Например, в первом объекте 102, первый ресурс 104 объекта может быть создан первым потоком 106, и к нему может осуществлять доступ и/или обновлять его второй поток 106. В некоторых случаях, совместное использование может происходить без ограничения, например, ресурс 104 объекта, который является свободно и одновременно доступным любому числу потоков 106. Однако, в других обстоятельствах, совместное использование может подразумевать механизм синхронизации, такую как блокировке 112 ресурса объекта, которая предоставляет монопольный доступ относительно ресурса 104 объекта конкретному потоку 106. Блокировка 112 ресурса объекта может запрещать доступ к ресурсу 104 объекта любым другим потокам 106 в течение интервала, когда монопольно авторизованный поток 106 удерживает блокировку 112 ресурса объекта, и может записывать такие неудовлетворенные запросы доступа других потоков 106, необязательно блокируя выполнение таких других потоков 106 до тех пор, пока такой доступ не сможет быть предоставлен. Когда такой поток 106 завершает монопольный доступ и освобождает блокировку 112 ресурса объекта, компонент вычислительного окружения (например, диспетчер блокировки синхронизации) может просматривать список ожидающих запросов на доступ к ресурсу 104 объекта, может выбирать один из ожидающих запросов (например, согласно порядку приоритета) и может уведомлять поток о том, что инициировал выбранный запрос для разрешения блокировки 112 ресурса объекта (необязательно разблокируя поток 106 во время состояния неопределенности запроса).
[0026] В таких сценариях потоки 106 могут удерживать соответствующие объекты 102 в течение полезного жизненного цикла объектов. При завершении жизненного цикла конкретного объекта 102 поток 106 может попытаться уничтожить объект 102 для того, чтобы возвращать обратно вычислительные ресурсы, используемые им, такие как системная память, пространство для хранения в кэше или вторичной памяти и использование процессора. Процесс уничтожения объекта может быть инициирован явно (например, поток 106 может вызывать операцию удаления по объекту 102) или неявно (например, поток 106 может сохранять только ссылку на объект 102, и фрагмент кода, который использует ссылку, может выходить из области применения, приводя в результате к объекту 102 без оставшихся ссылок). Процесс уничтожения объекта, вызванный потоком 106, может подразумевать уничтожение каждого из ресурсов 104 объекта, содержащих объект 102, и затем уничтожение контейнера объекта для объекта 102.
[0027] Дополнительно, некоторые обстоятельства могут разрешать объекту 102, который был создан первым потоком 106 и который совместно используется между первым объектом 106 и вторым объектом 106, быть уничтоженным либо первым потоком 106, либо вторым потоком 106. Например, в примерном сценарии 100 на фиг. 1, первый поток 106 может создавать первый объект 102 и первый ресурс 104 объекта, содержащийся в нем, и второй поток 106 может инициировать запрос 114 уничтожения объекта, чтобы уничтожать объект 102. Запрос может быть удовлетворен посредством уничтожения ресурса 104 объекта и затем уничтожения объекта 102, и успешное завершение уничтожения объекта может быть указано второму потоку 106, который инициировал запрос 114 уничтожения объекта, через возвращаемое значение, которое указывает успех 206. Уничтожение объекта 102 тем или другим потоком 106 может, следовательно, влиять на другой поток 106, который также осуществляет доступ к объекту 102 совместным образом. В таких обстоятельствах, вычислительное окружение может либо отклонять запрос первого потока 106 на уничтожение объекта 102, либо может удовлетворять запрос, сбрасывая ссылки на объект 102, удерживаемый вторым потоком 106, в значение по умолчанию или неопределенное значение, тем самым, предоставляя возможность второму потоку 106 избегать ошибки недействительной ссылки на ячейку памяти. Таким образом, потоки 106 могут взаимодействовать, чтобы разделять доступ к объектам 102 и ресурсам 104 объектов, содержащимся в них, и поток 106 может инициировать и завершать процесс уничтожения объекта для соответствующих объектов 102 при завершении жизненного цикла объекта.
[0028] Однако, в таких обстоятельствах, конкретный поток 106, который инициирует запрос 114 уничтожения объекта, может быть неспособен завершать процесс уничтожения объекта, по множеству причин.
[0029] В качестве первого такого примера, объект 102 может включать в себя ресурсы 104 объекта, которые были соответственно созданы в различных средах 108 выполнения, каждая из которых может использовать конкретное соглашение для создания, также как уничтожения, ресурсов 104 объектов для соответствующих объектов. В других обстоятельствах поток 106, исполняющийся в конкретной среде 108 выполнения, может не знать и/или быть неспособным инициировать процесс уничтожения ресурса объекта, который используется другой средой 108 выполнения, которая создала ресурс 104 объекта. Например, в примерном сценарии 100 на фиг. 1, второй объект 102 включает в себя третий ресурс 104 объекта, который был создан по запросу 110 создания ресурса первого потока 106, исполняющегося в первой среде 108 выполнения, а также четвертый ресурс 104 объекта, который был создан по запросу 110 создания ресурса второго потока 106, выполняющегося во второй среде 108 выполнения. Первый поток 106 (например, собственный C-процесс) может быть неспособным инициировать уничтожение четвертого ресурса 104 объекта (который был создан посредством механизма выполнения.NET); аналогично, второй поток 106 (например, управляемый C#-процесс) может быть неспособным инициировать уничтожение третьего ресурса 104 объекта (который был создан посредством собственного C-процесса). Соответственно, ни тот, ни другой поток 106 не может быть приспособлен для инициирования и завершения уничтожения второго объекта 102, и какой-либо запрос 114 уничтожения объекта, инициированный тем или другим потоком 106, может приводить в результате к неудаче 118.
[0030] В качестве второго такого примера, ресурс 104 объекта для объекта 102 может монопольно использоваться вторым потоком 106, который удерживает блокировку 112 ресурса объекта, и первому потоку 106, который инициирует запрос на уничтожение объекта 102, может быть не разрешено уничтожать ресурс 104 объекта и, следовательно, объект 102, пока второй поток 106 не завершит свой монопольный доступ и не уступит блокировку 112 ресурса объекта. Кроме того, как показано в примерном сценарии 100 на фиг. 1, третий объект 102 содержит пятый ресурс 104 объекта, для которого второй поток 106 удерживает первую блокировку 112 ресурса объекта, а также шестой ресурс 104 объекта, для которого первый поток 106 удерживает вторую блокировку 112 ресурса объекта. В этом случае, ни тот, ни другой поток 106 не приспособлен, сам, как для инициирования, так и завершения запроса 114 уничтожения объекта, и какой-либо такой запрос может приводить в результате к неудаче 118.
[0031] Могут возникать еще одни обстоятельства, которые препятствуют завершению уничтожения объекта для объекта 102 конкретным потоком 106. В качестве третьего примера ресурс 104 объекта может иметь особые, заранее необходимые критерии для удовлетворения, прежде чем ресурс 104 объекта уничтожается, такие как уничтожение сначала второго ресурса 104 объекта для того же объекта 102 или другого объекта 102; одновременное уничтожение второго ресурса 104 объекта для объекта 102; и/или разрешение лишь конкретному потоку 106 (например, потоку 106, который служит в качестве диспетчера для ресурса 104 объекта) инициировать уничтожение ресурса 104 объекта. В качестве четвертого примера объект 102 и/или ресурс 104 объекта могут быть рассмотрены в циклическом графе объектов, содержащем набор объектов 104, которые ссылаются друг на друга циклическим образом, и при этом каждый объект 102 может быть уничтожен, только после того как другие объекты 102 уничтожены. В отсутствие распознавания этого обстоятельства циклический граф объектов может вести к безвыходному положению, которое исключает заранее уничтожение каких-либо объектов 102. В качестве пятого примера ресурс 104 объекта может просто быть занят; например, ресурс 104 объекта может содержать описатель относительно внешнего устройства, которое выполняет непрерываемый процесс, при этом уничтожение ресурса 104 объекта перед завершением непрерываемого процесса может портить внешнее устройство. В то время как может быть возможно для потока 106, инициирующего запрос 114 уничтожения объекта, блокировать такой объект 102, пока ресурс 104 объекта не будет доступным для уничтожения, такая блокировка может инструктировать потоку 106 становиться неотвечающим, возможно в течение продолжительного и возможно неопределенного интервала.
[0032] В таких обстоятельствах, неспособность потока 106 завершать запрос 114 уничтожения объекта в отношении объекта 102 может быть неожиданной, так что ошибка или необработанное исключение вынуждают поток 106 становиться неотвечающим, терпеть аварию или блокироваться неожиданным образом. В некоторых случаях, когда поток 106 встречает препятствие во время обработки запроса 114 уничтожения объекта, поток 106 может отказываться от задачи уничтожения. Однако, если вычислительное окружение не имеет какого-либо механизма для возобновления и потенциального завершения уничтожения объекта для объекта 102, объект 102 может продолжать существовать бесконечно в качестве утечки ресурсов, которая расходует вычислительные ресурсы, такие как память и процессорные циклы, без продуктивного результата. Кроме того, когда поток 106 частично уничтожает объект 102 и затем отменяет уничтожение вследствие препятствия, объект 102 может оставаться в несогласованном и неопределенном состоянии, при этом некоторые ресурсы, потребляемые объектом 102, могут не удовлетворять подразумеваемой модели, определенной для использования ресурса. Например, вычислительное окружение может отслеживать использование сети согласно потокам 106, которые ссылаются на объекты 102, в которых сетевые описатели хранятся и используются. Однако, вычислительное окружение может не ожидать обстоятельство объекта 102, который использует сеть, но на который не ссылается поток 106, и такой неожиданный результат может создавать непредвиденное поведение в других потоках 106 вычислительного окружения, такое как неидентифицируемое и потенциально бесконечное потребление пропускной способности сети. В еще одних случаях, поток 106 может быть подготовлен для обработки неспособности завершать уничтожение объекта 102, но может быть неспособен определять, почему уничтожение объекта для объекта 102 потерпело неудачу, ни иметь какой-либо правильный механизм для продолжения процесса уничтожения объекта. Например, поток 106 может распознавать, что некоторый другой поток 106 является ответственным за уничтожение конкретного ресурса 104 объекта для объекта 102, но может быть неспособным идентифицировать и/или уведомлять какой-либо такой другой поток 106 о запросе 114 уничтожения объекта. В качестве еще одного потенциального недостатка, в некоторых обстоятельствах, требуемые заранее критерии уничтожения ресурсов 104 объекта для объекта 102 могут быть сложными и иметь нюансы, так что конфигурирование какого-либо конкретного потока 106, чтобы справляться со сложностями процесса уничтожения объекта для какого-либо конкретного объекта 102, может делегировать нежелательный объем сложности для разработчика потока 106. Кроме того, критерии, которые могут быть свойственны уничтожению ресурса 104 объекта, могут эволюционировать со временем (например, новый критерий может быть определен согласно вновь реализованным окружающим механизмам вычислительного окружения), накладывая значительную и потенциально чрезмерную нагрузку разработки на разработчика конкретного потока 106. Эти и другие сложности могут возникать в контексте запроса 114 уничтожения объекта для потока 106 в отношении ресурсов 104 объекта для объекта 102.
[0033] B. Представленные методики
[0034] В свете сложностей уничтожения объектов для объектов 102, включающих в себя объекты, иллюстрированные в примерном сценарии 100 на фиг. 1, настоящее изобретение предоставляет методики для содействия потокам 106 в уничтожении объектов 102, и в конкретных сценариях обращения, в которых первый поток 106 инициирует запрос 114 уничтожения объекта, но не может завершать уничтожение объекта для объекта 102. Эти методики подразумевают представление процесса уничтожения объекта в качестве последовательности действий для уничтожения объекта, которая инкапсулирует и выполняет задачи для уничтожения объекта для конкретного объекта 102 от имени различных потоков 102.
[0035] Фиг. 2 является иллюстрацией примерного сценария 200, представляющего последовательность 202 действий для уничтожения объекта, которая уничтожает объект 102 в соответствии с методиками, представленными в данном документе. В этом примерном сценарии 200, в первое время 216, первый поток 106 инициирует запрос 114 уничтожения объекта, чтобы уничтожать объект 102, содержащий два ресурса 104 объекта. В этом конкретном примере уничтожение объекта инициируется, когда первый поток 106 освобождает ссылку на объект 102, которая оказывается последней ссылкой 206 на объект 102. Освобождение ссылки 206 инструктирует счетчику 204 ссылок для ссылок 206 на объект 102 уменьшаться с единицы до нуля, указывая, что, поскольку потоки 106 в вычислительном окружении не удерживают ссылку 206, объект 102 достиг конца жизненного цикла объекта и готов к уничтожению. Соответственно, первый поток 106 инициирует уничтожение объекта 102 в ответ на уменьшение счетчика 204 ссылок до нуля. Однако, вместо попытки выполнить уничтожение объекта самостоятельно, поток 106 предоставляет запрос 114 уничтожения объекта в последовательность 202 действий для уничтожения объекта, которая инициирует уничтожение объекта 102 от имени потока 106. Последовательность 202 действий для уничтожения объекта начинается инициированием уничтожения 208 ресурса объекта для первого ресурса 104 объекта, что приводит к успеху 116.
[0036] Как дополнительно иллюстрируется в примерном сценарии 200 на фиг. 2, во второе время 218, последовательность 202 действий для удаления объекта может продолжать уничтожение объекта 102 от имени первого потока 106, инициируя уничтожение 208 ресурса объекта для второго ресурса 104 объекта, но может сталкиваться с неудачей 118. Например, ко второму ресурсу 104 объекта может иметь монопольный доступ другой поток 106, удерживающий блокировку 112 ресурса объекта; он может быть создан другим потоком 106 в другой среде 108 выполнения, которая использует другие и потенциально неизвестные процессы уничтожения ресурса объекта; и/или может просто быть занят, например, ожидать непрерываемые процессы посредством других ресурсов или устройств. В ответ на столкновение с неудачей 118 последовательность 202 действий для уничтожения объекта может инициировать создание 210 ссылки для новой ссылки 206 на объект 102 и добавлять новую ссылку 206 в список 212 уничтожения объекта. Список 212 уничтожения объекта содержит хранилище последних ссылок 206 на объекты 102, которые находятся в процессе уничтожения (и, более конкретно, объекты 102, для которых процесс уничтожения объекта был ранее инициирован последовательностью 202 действий для уничтожения объекта от имени, по меньшей мере, одного потока 106, но где препятствие помешало последовательности 202 действий для уничтожения объекта в завершении запроса 114 уничтожения объекта). Новая ссылка 204, теперь содержащая последнюю ссылку 206 на объект 102, вставляется последовательностью 202 действий для уничтожения объекта в список 212 уничтожения объекта, и последовательность действий для уничтожения объекта увеличивает счетчик 204 ссылок для объекта 102 с нуля до единицы. Последовательность 202 действий для уничтожения объекта может также сообщать о неудаче 118 первому потоку 106, который может возобновлять выполнение, как если бы объект 102 был полностью уничтожен.
[0037] Как дополнительно иллюстрировано в примерном сценарии 200 на фиг. 2, в третье время 220, второй поток 106 может обнаруживать и/или быть оповещенным о последней ссылке 206 на объект 102 в списке 212 уничтожения объекта. Второй поток 106 может иметь объект 102, к которому ранее осуществлялся доступ (или может даже создать объект 102), и может, следовательно, инициировать освобождение 214 ссылки для ссылки 206. Освобождение 214 ссылки инструктирует уменьшение счетчика 202 ссылок с единицы до нуля, что повторно инициирует запрос 114 уничтожения объекта посредством последовательности 202 действий для уничтожения объекта, но в это третье время 220, от имени второго потока 106 вместо первого потока 106. Последовательность 202 действий для уничтожения объекта может снова инициировать уничтожение 208 ресурса объекта для второго ресурса 104 объекта для объекта 102, и эта попытка может приносить успех 116 (например, поскольку последовательности 202 действий для уничтожения объекта разрешается уничтожать ресурс 104 объекта от имени второго поток а106, но не первого объекта 106). При наличии завершенного уничтожения объекта для объекта 102, последовательность 202 действий для уничтожения объекта может сообщать об успехе 106 второму потоку 106. Таким образом, последовательность 202 действий для уничтожения объекта успешно выполняет уничтожение объекта для объекта 102 через итеративный процесс, подразумевающий взаимодействие обоих потоков 106 в соответствии с методиками, представленными в данном документе.
[0038] C. Технические результаты
[0039] Различные использования методик, представленных в данном документе, могут приводить ко множеству технических результатов.
[0040] Первый технический результат, который является достижимым согласно методикам, представленным в данном документе, подразумевает успешное уничтожение объекта 102 согласно последовательности 202 действий для уничтожения объекта. Последовательность 202 действий для уничтожения объекта предоставляет итеративный процесс уничтожения объекта, который может подразумевать взаимодействие множества потоков 106, и/или один поток 106 в два или более последовательных момента времени, в качестве инкрементного процесса уничтожения ресурсов 104 объекта для объекта 102. Такой итеративный процесс может предоставлять возможность прохождения широкого диапазона потенциальных препятствий для инициирования и завершения уничтожения объекта посредством одного потока 106 в одной фазе, и может уменьшать инцидентность исключений, блокировки потока, отмененного удаления объекта, что приводит в результате к частично удаленному объекту 102 в несогласованном состоянии, утечкам ресурсов, вызванным не полностью удаленными объектами 102, неожиданному поведению потоков 106 и/или вычислительного окружения вследствие несогласованных и возможно утекающих объектов 102, прерыванию непрерываемых процессов и процессам блокировки системы, при этом ни один поток 106 не приспособлен для уничтожения объекта 102 без взаимодействия других потоков 106.
[0041] Второй технический результат, который является достижимым согласно методикам, представленным в данном документе, подразумевает использование, последовательностью 202 действий для уничтожения объекта, предварительно существующих ресурсов вычислительного окружения в процессе уничтожения объекта, включающем в себя методики подсчета ссылок, которые могут уже быть доступны в вычислительном окружении, и автоматизированную семантику для инициирования уничтожения объекта, после того как счетчик 204 ссылок для объекта 102 уменьшается до нуля. Дополнительно, использование списка 212 уничтожения объекта, в качестве хранилища ссылок 206 на объекты 102, которые готовы к уничтожению (и для которых предыдущая попытка последовательности 202 действий для уничтожения объекта уничтожить объект 102 от имени одного или более потоков 106 закончилась в результате неудачей 118), служит в качестве механизма координирования между потоками 106; например, присутствие ссылки 206 в списке 212 уничтожения объекта служит в качестве подразумеваемого запроса для потоков 106 вычислительного окружения пытаться уничтожить объект 102, и попытки каждого такого потока 106 могут, в конечном счете, приводить в результате к успешному завершению 116, которое завершает, или, по меньшей мере, продвигает вперед, уничтожение объекта 102. Соответственно, потоки, которые уже сконфигурированы для использования ссылок 206, могут быть приспособлены для участия в инкрементном процессе уничтожения объекта при посредничестве последовательности 202 действий для уничтожения объекта, без переконфигурирования или какого-либо знания разработчиком семантики и механики таких методик.
[0042] Третий технический результат, который является достижимым согласно методикам, представленным в данном документе, подразумевает уменьшение сложности разработки от имени потоков 106 в обработке уничтожения объекта. Делегирование деталей и механики уничтожения объекта от потоков 106 в последовательность 202 действий для уничтожения объекта предоставляет возможность потокам 106 не обращать внимания на ход и сложности процесса уничтожения объекта; например, потоки 106 не должны конфигурироваться, чтобы обрабатывать неудачные завершения 118, различные причины для этого и/или обмениваться запросами с другими потоками 106, чтобы делать дополнительную попытку уничтожить объект 102. Последовательность 202 действий для уничтожения объекта может даже автоматизировать процесс повторного инициирования уничтожения объекта 102 посредством того же потока 106 в более позднее время, а не потоком 106, несущим ответственность за повторное инициирование попытки позже. Каждый поток 106 может быть сконфигурирован просто для инициирования запроса 114 уничтожения объекта, и затем продолжает обработку, до завершения уничтожения объекта, и даже независимо от результата первоначального запроса 114 уничтожения объекта. Последовательность 202 действий для уничтожения объекта, следовательно, обеспечивает эффективность потоков 106, уменьшая блокировку потоков и/или сложность в участии в процессе уничтожения объекта и предоставляя возможность потокам 106 возобновлять продуктивную обработку, в то время как уничтожение объекта обрабатывается где-либо в другом месте.
[0043] Четвертый технический результат, который является достижимым согласно методикам, представленным в данном документе, подразумевает усложнение процесса уничтожения объекта. Посредством инкапсуляции деталей уничтожения объекта последовательность 202 действий для уничтожения объекта может быть сконфигурирована для обработки широкого спектра объектов 102 и ресурсов 104 объектов, подлежащих уничтожению; широкого спектра обстоятельств, которые могут усложнять их уничтожение; и широкого спектра методик, чтобы обеспечивать обработку конкретных типов и обстоятельств объектов 102 и ресурсов 104 объектов.
[0044] Фиг. 3 является иллюстрацией примерного сценария 300, показывающего примерную последовательность 202 действий для уничтожения объекта. В этом примерном сценарии 300 последовательность 202 действий для уничтожения объекта формулируется для уничтожения объекта, от имени двух потоков 106, для конкретного объекта 102, характеризующего полноценный набор ресурсов 104 объекта. Примерная последовательность 202 действий для уничтожения объекта представляется как набор задач 302, которые должны выполняться по объекту 102, таких как пометка объекта 102 как ожидающего уничтожения и уничтожение конкретных ресурсов 102. Кроме того, соответствующие задачи 302 ассоциируются с одним или более критериями 304 задачи, такими как одно или более предварительных условий, которые должны быть удовлетворены перед инициированием задачи 302 (например, предварительное условие наличия первого завершенного уничтожения других ресурсов 104 объекта), и/или обстоятельства, при которых задача 302 может быть выполнена (например, идентификация типов потоков 106, от имени которых последовательность 202 действий для уничтожения объекта может выполнять задачу 302, и/или идентификация второго ресурса 104 объекта, который должен быть уничтожен одновременно с первым ресурсом 104 объекта). Последовательность 202 действий для уничтожения объекта может также содержать набор указателей 306 состояния соответствующих задач 302, указывающих, была или нет задача 302 завершена. Некоторые задачи 302 последовательности 202 действий для уничтожения объекта могут выполняться одновременно с другими задачами 302 и/или в каком-либо последовательном порядке (например, уничтожение первого ресурса 104 объекта и второго ресурса 104 объекта могут выполняться одновременно и/или в каком-либо последовательном порядке), в то время как другие задачи 302 могут указывать критерии 304, которые принудительно осуществляют конкретный последовательный порядок и/или параллельность.
[0045] Когда конкретный поток 106 уменьшает счетчик 204 ссылок для объекта 102 с единицы до нуля, поток 106 может инициировать запрос 114 уничтожения объекта. Последовательность 202 действий для уничтожения объекта может отвечать посредством изучения списка задач 302, также как соответствующих критериев 304 задач и указателей 306 состояния, чтобы идентифицировать одну или более задач 302, которые имеют право выполняться от имени потока 106. Последовательность 202 действий для уничтожения объекта может затем выполнять идентифицированные задачи 302 от имени потока 106, либо до тех пор, пока задачи 302 не будут завершены (так что уничтожение объекта является успешным 116), или до тех пор, пока дополнительные задачи 302 не будут иметь право выполняться от имени этого потока 106, в такой момент последовательность 202 действий для уничтожения объекта вставляет новую ссылку 206 на объект 102 (в качестве последней ссылки 206) в список 212 уничтожения объекта, в качестве механизма для возобновления уничтожения объекта для объекта 102 в более позднее время и возможно от имени другого потока 106. Таким образом, последовательность 202 действий для уничтожения объекта может предоставлять возможность и согласовываться с устойчивым набором задач 302 и критериев 304 задач в уничтожении ресурсов 104 объекта и объекта 102. Множество таких технических результатов могут быть достижимы посредством уничтожения объектов 102 с помощью последовательности 202 действий для уничтожения объекта в соответствии с методиками, представленными в данном документе.
[0046] D. Примерные варианты осуществления
[0047] Фиг. 4 представляет иллюстрацию примерного сценария 400, показывающего примерный вариант осуществления методик, представленных в данном документе, иллюстрированных в качестве примерного устройства 402, которое уничтожает объекты 102 в соответствии с методиками, представленными в данном документе. В этом примерном сценарии 400 устройство 402 содержит процессор 404, который выполняет множество потоков 106, например, от имени различных приложений и/или вычислительного окружения устройства 302. Устройство 402 дополнительно содержит память 406, хранящую инструкции, которые, когда исполняются процессором 404, реализуют примерную систему 408, которая уничтожает объекты 102 от имени потоков 106 согласно методикам, представленным в данном документе.
[0048] Примерная система 408 содержит список 212 уничтожения объекта, который хранит ссылки 206 на объекты 102, которые должны быть уничтожены (и, более конкретно, на объекты 102, для которых уничтожение объекта является незаконченным, следуя, по меньшей мере, одной предыдущей попытке уничтожить объект 102 от имени, по меньшей мере, одного потока 106, которая закончилась в результате неудачей 118). Примерная система 408 дополнительно содержит последовательность 202 действий для уничтожения объекта, которая исполняется процессором 304 от имени первого потока 106. Последовательность 202 действий для уничтожения объекта реагирует на освобождение последней ссылки 206 на объект 102 (например, уменьшение счетчика 204 ссылок с единицы до нуля), пытаясь уничтожить объект 102 (например, выполняя различные задачи 302, такие как уничтожение индивидуальных ресурсов 104 объекта для объекта 102). В ответ на неудачу 118 завершения уничтожения объекта для объекта 102 последовательность 202 действий для уничтожения объекта добавляет новую ссылку 206 на объект 102 в список 212 уничтожения объекта, при этом новая ссылка 206 представляет последнюю ссылку 206 на объект 102. Создание новой ссылки 206 может также вызывать увеличение счетчика 204 ссылок для ссылок 206 на объект 102 с нуля до единицы. Кроме того, последовательность 202 действий для уничтожения объекта отвечает на идентификацию в списке 212 уничтожения объекта последней ссылки 206 на объект 102, от имени первого потока 106, добавленной от имени второго потока 106, освобождая последнюю ссылку 206 на объект 102. Такое освобождение, в свою очередь, вызывает последовательность 202 действий для уничтожения объекта с помощью запроса 114 уничтожения объекта для объекта 102, от имени первого потока 106, который может приводить в результате к успеху 116 (или, по меньшей мере, прогрессу) уничтожения объекта для объекта 102. Таким образом, примерное устройство 402 и примерная система 406 на фиг. 4 содействуют потокам 106 в уничтожении объектов 102 с помощью последовательности 202 действий для уничтожения объекта в соответствии с методиками, представленными в данном документе.
[0049] Фиг. 5 является иллюстрацией примерного способа 500 уничтожения объектов 102 от имени потоков 106 посредством использования последовательности 202 действий для уничтожения объекта, в соответствии с методиками, представленными в данном документе. Примерный способ 500 затрагивает устройство, содержащее процессор 404, и может быть реализован, например, как набор инструкций, сохраненных в запоминающем компоненте устройства, таком как запоминающая схема, пластина накопителя на жестком диске, твердотельное запоминающее устройство или магнитный или оптический диск, и организованных так, что, когда исполняются в процессоре устройства, инструктируют устройству работать согласно методикам, представленным в данном документе.
[0050] Примерный способ 500 начинается на этапе 502 и подразумевает выполнение 504 последовательности 202 действий для уничтожения объекта в процессоре 404 устройства. В частности, выполнение последовательности 202 действий для уничтожения объекта формирует 506 список 212 уничтожения объекта, который хранит ссылки 206 на объекты 102, которые должны быть уничтожены. Выполнение последовательности 202 действий для уничтожения объекта, от имени 508 первого потока 106 и в ответ на освобождение последней ссылки 206 на объект 102, к которому осуществляет доступ первый поток 106, дополнительно пытается 510 уничтожить объект 102; и в ответ на неудачу 118 завершения уничтожения объекта 102 дополнительно добавляет 512 новую ссылку 206 на объект 102 в список 212 уничтожения объекта в качестве последней ссылки 206 на объект 102, при этом включение последней ссылки 206 на объект 102 в списке 212 уничтожения объекта побуждает другие потоки 106 (необязательно включающие в себя первый поток 106) пытаться уничтожить объект 102. Добившись уничтожения объекта для объекта 102 от имени потоков 102, примерный способ 500 реализует последовательность 202 действий для уничтожения объекта и список 212 уничтожения объекта в соответствии с методиками, представленными в данном документе, и, таким образом, заканчивается на этапе 514.
[0051] Еще один вариант осуществления подразумевает машиночитаемый носитель, содержащий исполняемые процессором инструкции, сконфигурированные, чтобы применять методики, представленные в данном документе. Такие машиночитаемые носители могут также включать в себя различные типы среды передачи данных, такие как сигнал, который может распространяться посредством различных физических явлений (например, электромагнитный сигнал, сигнал звуковой волны или оптический сигнал) и в различных проводных сценариях (например, через Ethernet или волоконно-оптический кабель) и/или беспроводных сценариях (например, беспроводная локальная вычислительная сеть (WLAN), такая как WiFi, персональная вычислительная сеть (PAN), такая как Bluetooth, или сотовая или радиосеть), и которые кодируют набор машиночитаемых инструкций, которые, когда выполняются процессором устройства, инструктируют устройству реализовывать методики, представленные в данном документе. Такие машиночитаемые носители могут также включать в себя (как класс технологий, которые исключают среду передачи данных) машиночитаемые запоминающие устройства, такую как память на полупроводниках (например, использующие полупроводники технологии статического оперативного запоминающего устройства (SRAM), динамического оперативного запоминающего устройства (DRAM) и/или синхронного динамического запоминающего устройства (SDRAM)), пластину накопителя на жестком диске, устройство флэш-памяти или магнитный или оптический диск (такой как CD-R, DVD-R или гибкий диск), кодирующие набор машиночитаемых инструкций, которые, когда выполняются процессором устройства, инструктируют устройству реализовывать методики, представленные в данном документе.
[0052] Примерный машиночитаемый носитель, который может быть разработан этими способами, иллюстрируется на фиг. 6, при этом реализация 600 содержит машиночитаемое запоминающее устройство 602 (например, CD-R, DVD-R или пластину накопителя на жестком диске), на котором закодированы считываемые компьютером данные 604. Эти считываемые компьютером данные 604, в свою очередь, содержат набор компьютерных инструкций 606, которые, когда выполняются в процессоре 404 устройства 610, инструктируют устройству 610 работать согласно принципам, изложенным в данном документе. В первом таком варианте осуществления исполняемые процессором инструкции 606 могут предоставлять возможность конфигурации устройства уничтожать объекты 102 с помощью последовательности 202 действий для уничтожения объекта в соответствии с методиками, представленными в данном документе, такими как примерное устройство 402 в примерном сценарии 400 на фиг. 4. В первом таком варианте осуществления исполняемые процессором инструкции 606 могут предоставлять систему, которая, когда исполняется посредством устройства, инструктирует устройству уничтожать объекты 102 с помощью последовательности 202 действий для уничтожения объекта в соответствии с методиками, представленными в данном документе, такими как примерная система 408 в примерном сценарии 400 на фиг. 4. В третьем таком варианте осуществления исполняемые процессором инструкции 606 машиночитаемого запоминающего устройства 602 могут предоставлять способ 608 для инструктирования устройству уничтожать объекты 102 с помощью последовательности 202 действий для уничтожения объекта в соответствии с методиками, представленными в данном документе, такими как примерный способ 500 на фиг. 5. Многие такие машиночитаемые носители могут быть разработаны обычными специалистами в данной области техники, которые сконфигурированы, чтобы работать в соответствии с техническими приемами, представленными в данном документе.
[0053] E. Разновидности
[0054] Методики, обсужденные в данном документе, могут быть задуманы с разновидностями во многих аспектах, и некоторые разновидности могут представлять дополнительные преимущества и/или уменьшать недостатки относительно других вариаций этих и других методик. Кроме того, некоторые разновидности могут быть реализованы в комбинации, и некоторые комбинации могут характеризоваться дополнительными преимуществами и/или уменьшенными недостатками за счет синергетического взаимодействия. Разновидности могут быть объединены в различные варианты осуществления (например, примерное устройство 400 и/или примерную систему 408 на фиг. 4; примерный способ 500 на фиг. 5; и/или примерное машиночитаемое запоминающее устройство 602 на фиг. 6), чтобы придавать отдельные и/или синергетические преимущества при таких вариантах осуществления
[0055] E1. Сценарии
[0056] Первый аспект, который может изменяться между вариантами осуществления методик, представленных в данном документе, относится к диапазону сценариев, в которых такие методики могут быть использованы.
[0057] В качестве первой разновидности этого первого аспекта методики, представленные в данном документе, могут быть использованы с множеством устройств, таких как рабочие станции; портативные компьютеры; планшеты; мобильные телефоны; игровые консоли и переносные игровые устройства; переносные или непереносные мультимедийные проигрыватели; мультимедийные устройства отображения, такие как телевизоры, приборы; бытовая техника и устройства автоматизации; и вычислительные компоненты, объединенные с носимым устройством, объединяющим их, таким как очки или часы.
[0058] В качестве второй разновидности этого первого аспекта методики, представленные в данном документе, могут быть использованы с множеством потоков 106, таких как приводимые в действие с помощью GUI, приводимые в действие с помощью консоли и/или приложения без UI; службы и демоны; драйверы устройств; и фактические или виртуализированные процессы операционной системы, такие как процессы ядра и процессы файловой системы. Различные модели поточной обработки и диспетчеризации потоков могут быть совместимы с методиками, представленными в данном документе. Потоки 106 могут исполняться в различных типах сред 108 выполнения, таких как собственные среды 108 выполнения, предоставленные на машинном языке и исполняющиеся непосредственно процессором 404; управляемые приложения, которые выполняются на этапе выполнения в конкретной среде выполнения; виртуализированные приложения, которые выполняются в виртуальной машине, такой как веб-браузер; и сценарии, выполняемые интерпретатором. Дополнительно, множество типов объектов 102 и ресурсов 104 объектов могут быть управляемыми и, в частности, уничтожаться посредством методик, представленных в данном документе, включающих в себя легковесные наборы нетипизированных и/или слаботипизированных объектов (например, хранилища ключей/значений, такие как JSON-объекты) и в значительной степени организованных и типизированных объектов (например, глубокую иерархию объектов на основе классов с наследованием и полиморфной типизацией). Последовательность 202 действий для уничтожения объекта может также быть вызвана, чтобы уничтожать какой-либо объект 102 в вычислительном окружении устройства 402; только для объектов 102, для которых уничтожение объекта представляет сложность, таких как объекты 102, которые совместно используются множеством потоков 106 и/или сред 108 выполнения; и/или только для объектов 102, для которых поток 106 попытался инициировать и завершить процесс уничтожения объекта и столкнулся с неудачей 118.
[0059] В качестве третьей разновидности этого первого аспекта могут быть использованы множество типов последовательностей 202 действий для уничтожения объекта. В качестве первого такого примера, шаблоны последовательности действий часто используются для множества типов задач в различных вычислительных окружениях, и множество таких последовательностей действий применяются к интенсивно использующим ресурсы и расточительных в вычислительном плане процессов, таких как запутанные этапы, подразумеваемые в завершении транзакции базы данных. Последовательность 202 действий для уничтожения объекта, представленная в данном документе, используется в качестве шаблона для организации уничтожения объектов 102 и может подходить для широкого множества объектов 102, включающих в себя сравнительно легковесные объекты, которые типично являются уничтожаемыми в ответ на единственный запрос 114 уничтожения объекта (но которые могут сталкиваться со сложностями в необычных ситуациях, таких как монопольная блокировка другим потоком 106), и сложные объекты 102, хранящие полноценный набор ресурсов 104 объекта с детализированными критериями 304 задач, такими как иллюстрированные в примерном сценарии 300 на фиг. 3. Обобщенная последовательность 202 действий для уничтожения объекта может также масштабироваться, чтобы обеспечивать уничтожение широкого диапазона таких объектов 102, например, всего набора объектов 102, используемых полноценным приложением, когда такие объекты 102 включают в себя и легковесные объекты 102, которые типично легко уничтожить, и сложные объекты 102, представляющие обширные критерии 304 задачи в их уничтожении. Методики, представленные в данном документе, могут подходить для использования с широким диапазоном типов объектов и сложности.
[0060] В качестве второго такого примера, последовательность 202 действий для уничтожения объекта может содержать компонент операционной системы устройства 402; компонент одной или более рабочих сред, предоставленных платформой или архитектурным признаком такого устройства 402; и/или библиотеку рабочей среды, установленную на устройстве 402, которая может быть доступна всем потокам 106 для уничтожения каких-либо объектов 102 и/или может быть предоставлена для конкретной совокупности потоков 106 и/или объектов 102 (например, компонент веб-браузера, который обеспечивает уничтожение объекта для объектов 102, используемых веб-приложениями). Последовательность 202 действий для уничтожения объекта может также обеспечивать распределенный набор потоков 106, выполняющихся на совокупности устройств 402, такой как совокупность потоков 106, распределенных по множеству серверов, содержащих серверную ферму, и/или может быть вызвана, чтобы управлять уничтожением объекта для объектов 102, распределенных по множеству устройств, таких как совместно используемая совокупность объектов, сохраненных и/или используемых множеством объектных серверов. В качестве третьего такого примера последовательность 202 действий для уничтожения объекта может быть встроена в один или более объектов 102, которые управляются посредством последовательности 202 действий для уничтожения объекта; наоборот, последовательность 202 действий для уничтожения объекта может инкапсулировать объекты 102, управляемые посредством нее; и/или последовательность 202 действий для уничтожения объекта и объекты 102 могут существовать независимо, и/или в совместно используемом контексте, таком как среда выполнения для одного или более потоков 106. В качестве четвертого такого примера соотношение и/или взаимодействие между потоками 106 и последовательностью 202 действий для уничтожения объекта может быть определено различными способами. Например, последовательность 202 действий для уничтожения объекта может содержать диспетчер, который управляет уничтожением объекта для объекта от имени потоков 106; в качестве службы, которую потоки 106 могут вызывать для помощи в уничтожении объекта для объектов 102; и/или как сценарий, средства поддержки или библиотека функций, к которой потоки 106 могут обращаться и/или использовать для выполнения отдельных задач 302 уничтожения объекта для одного или более объектов 102. Потоки 106 могут также делегировать различные функции в последовательность 202 действий для уничтожения объекта; например, поток 106 и/или среда 108 выполнения могут показывать лямбда-выражение, функцию или обратный вызов, которые последовательность 202 действий для уничтожения объекта может вызывать для того, чтобы запрашивать участие потока 106 в задачах 302, подразумеваемых в уничтожении объекта для объекта 102.
[0061] В качестве четвертой разновидности этого первого аспекта могут быть использованы множество типов списков 212 уничтожения объекта. В качестве первого такого примера список 212 уничтожения объекта может быть реализован как множество типов структур данных, включающих в себя массив; связанный список; очередь; неупорядоченный набор; таблицу, такую как хеш-таблица; и древовидную структуру. В качестве второго такого примера список 212 уничтожения объекта может быть реализован как глобальный список 212 уничтожения объекта, который хранит последние ссылки 206 на какой-либо объект 102 вычислительного окружения, который должен быть уничтожен. Альтернативно, один или более списков 212 уничтожения объекта может быть предоставлен, где каждый список 212 уничтожения объекта хранит последние ссылки 206 на объекты 102 конкретного типа, такие как объекты 102 конкретного типа объекта, и/или объекты 102, используемые в выбранном контексте; объекты 102, используемые выбранными потоками 106, такими как потоки 106 конкретного языка программирования и/или среды 108 выполнения; и/или для объектов 102, хранящих конкретный набор ресурсов 104 объекта, таких как ресурсы 104 объекта конкретного типа 104 ресурса объекта. В качестве третьего такого примера список 212 уничтожения объекта может хранить различные типы последних ссылок 206, таких как указатель памяти на местоположение, где идентифицированный объект 102 хранится, или уникальный идентификатор объекта 102, такой как глобальный уникальный идентификатор (GUID) и/или универсальный идентификатор ресурса (URI) объекта 102. Альтернативно или дополнительно, список 212 уничтожения объекта может хранить ссылки 206 на конкретные ресурсы 104 объекта, которые должны быть уничтожены в ходе уничтожения одного или более объектов 102, которые включают в себя и/или обращаются к таким ресурсам 104 объекта. Множество таких разновидностей вычислительных сценариев и архитектурных разновидностей могут быть подходящими для использования последовательности 202 действий для уничтожения объекта, чтобы обеспечивать уничтожение объектов 102 в соответствии с методиками, представленными в данном документе.
[0062] E2. Последовательность действий для уничтожения объекта
[0063] Второй аспект, который может изменяться между вариантами осуществления методик, представленных в данном документе, относится к последовательности 202 действий для уничтожения объекта, которая используется потоками 106, чтобы осуществлять уничтожение объекта для различных объектов 102 вычислительного окружения.
[0064] В качестве первой разновидности этого второго аспекта последовательность 202 действий для уничтожения объекта может быть сформирована специально для того, чтобы проводить уничтожение объекта для конкретного объекта 102 и/или проводить уничтожение объектов 102 посредством конкретного потока 106. Альтернативно, последовательность 202 действий для уничтожения объекта может быть сформирована, чтобы проводить уничтожение какого-либо объекта 102 в вычислительном окружении от имени какого-либо потока 106 или обрабатывать конкретный поднабор объектов 102, которые используются конкретным поднабором потоков 106. В качестве одного такого примера вычислительное окружение может характеризовать контекст, подразумевающий совокупность потоков 106, которые взаимодействуют в отношении конкретного набора объектов 102, таких как потоки 106 и объекты 102, задействованные в конкретной службе, платформе, библиотеке и/или приложении. Дополнительно, последовательность 202 действий для уничтожения объекта может содержать различные типы информации об объекте 102 и/или потоках 106, затронутых в уничтожении объекта для объекта(ов) 102. В качестве одного такого примера, последовательность действий для уничтожения объекта может идентифицировать, для конкретного объекта 102, набор потоков 106, которые осуществляют доступ и/или которые могут осуществлять доступ к конкретному объекту 102. Хранение такой информации может предоставлять возможность последовательности 202 действий для уничтожения потока выдавать уведомление, относящееся к уничтожению конкретного объекта 102, в частности, потокам 106, которые осуществляют доступ и/или могут осуществлять доступ к объекту 102, например, для того, чтобы информировать их о ходе уничтожения объекта для объекта 102 и/или запрашивать участие таких потоков 106 в уничтожении объекта. Дополнительно, последовательность 202 действий для уничтожения объекта может включать в себя различные типы процессов уничтожения информации, которые могут быть применимы к различным объектам 102, такие как задачи 302, задействуемые в уничтожении объекта 102, критерии 304 задач, применимые к ним, и/или состояние 306 соответствующих задач 302 в уничтожении объекта.
[0065] В качестве второй разновидности этого второго аспекта уничтожение объекта для объекта 102 посредством последовательности 202 действий для уничтожения объекта может быть инициировано различными способами. В качестве первого такого примера поток 106 может инициировать явный запрос 114 уничтожения объекта, например, вызывая инструкцию удаления или интерфейс удаления для удаления объекта 102. В качестве второго такого способа поток 106 может инициировать неявный запрос 114 уничтожения объекта, такой как освобождение ссылки 206 на объект 102, которому случатся содержать последнюю ссылку 206 на объект, и который побуждает уменьшение счетчика 204 ссылок с единицы до нуля, или закрывает область действия потока 106, который содержит последнюю ссылку 206 на объект 102. В качестве третьего такого примера поток 106 может самостоятельно завершаться и/или может быть завершен другим потоком 106, и завершение потока 106 может включать в себя освобождение последней ссылки 206 на объект 102, которая удерживалась потоком 106.
[0066] В качестве третьей разновидности этого второго аспекта последовательность 202 действий для уничтожения объекта, во время выполнения уничтожения объекта для объекта 102 от имени первого потока 106, который инициировал запрос 114 уничтожения объекта, может сталкиваться с множеством типов препятствий, которые препятствуют завершению уничтожения объекта от имени первого потока 106. В качестве первого такого примера последовательность 202 действий для уничтожения объекта может обнаруживать, что выбранный фрагмент объекта 102 ассоциируется с процессом уничтожения объекта второго потока 106 (например, соглашение об уничтожении объекта, используемое средой 108 выполнения второго потока 106, такое как соглашение языка программирования и/или платформы второго потока 106), и может сталкиваться с неудачей 118 при определении того, что выбранный фрагмент объекта 102 ассоциируется с процессом уничтожения объекта, который должен быть вызван во втором потоке 106. В качестве второго такого примера последовательность 202 действий для уничтожения объекта может обнаруживать, что ресурс 104 объекта для объекта 102 монопольно удерживается другим потоком 106 через блокировку 112 ресурса объекта, которую ни первый поток 106, ни последовательность 202 действий для уничтожения объекта не способны прервать. В качестве третьего такого примера последовательность 202 действий для уничтожения объекта может определять, что ресурс 104 объекта для объекта 102 находится в занятом состоянии (например, маркер устройства, которое выполняет непрерываемый процесс с помощью внешнего устройства, когда уничтожение ресурса 104 объекта во время непрерываемого процесса может приводить в результате к искажению данных или повреждению внешнего устройства). В качестве четвертого такого примера последовательность 202 действий для уничтожения объекта может просто обнаруживать, что первый поток 106, инициирующий запрос 114 уничтожения объекта, не имеет разрешения уничтожать объект 102. Множество таких препятствий может возникать во время уничтожения объекта посредством последовательности 202 действий для уничтожения объекта.
[0067] Фиг. 7 является иллюстрацией примерного сценария 700, показывающего четвертую разновидность этого второго аспекта, при этом последовательность 202 действий для уничтожения объекта разрешает пометку объекта 102 как защищенного объекта, который является уничтожаемым только выбранным потоком 106, и при этом последовательность 202 уничтожения объекта отклоняет запросы 114 уничтожения объекта, инициированные каким-либо другим потоком 106. В этом примерном сценарии 700 конкретный объект 102 помечается 702 как защищенный объект, который может быть уничтожен только по запросу второго потока 106. В первое время 704 первый поток 106 инициирует запрос 114 уничтожения объекта, например, пытаясь уменьшить счетчик 204 ссылок с единицы до нуля. Однако, последовательность 202 действий для уничтожения объекта определяет, что объект 102 помечен, чтобы предотвращать уничтожение объекта первым потоком 106, и, следовательно, отклоняет запрос 114 уничтожения объекта первого потока 106 (включая в себя отвержение предоставления возможности первому потоку 106 уменьшать счетчик 204 ссылок с единицы до нуля и/или выполнять освобождение 214 ссылки для последней ссылки 206 в списке 212 уничтожения объекта) и возвращает неудачу 118 запроса 114 уничтожения объекта первому потоку 106. Во второе время 706 последовательность 202 действий уничтожения объекта принимает запрос 202 уничтожения объекта от второго потока 106 и подтверждает, что пометка 702 объекта 102 разрешает второму потоку 106 инициировать уничтожение объекта. Последовательность 202 действий уничтожения объекта, следовательно, выполняет освобождение 214 ссылки для последней ссылки 206 в списке 212 уничтожения объекта, уменьшает счетчик 204 ссылок с единицы до нуля и сообщает об успехе 116, по меньшей мере, инициирования запроса 114 уничтожения объекта для объекта 102.
[0068] Фиг. 8 представляет иллюстрацию примерного сценария 800, показывающего пятую разновидность этого второго аспекта, подразумевающую циклический граф 802 объектов для объектов 102, которые соответственно содержат ссылки 206 на другие объекты 102 графа 802 объектов, формируя цикл ссылок. Когда последовательность 202 действий для уничтожения объекта принимает, от потока 106, запрос 114 уничтожения объекта, чтобы уничтожать объект 102 из циклического графа 802 объектов, последовательность 202 действий для уничтожения объекта может сталкиваться с трудностью, в том, что ни один из объектов 102 не способен быть полностью уничтоженным без уничтожения сначала одного или более других объектов 102 циклического графа 802 объектов, которые хранят ссылки 206 на объект 102, идентифицированный в запросе 114 уничтожения объекта. Полный набор объектов 102, содержащих циклический граф 802 объектов, может, следовательно, продолжать существовать после жизненного цикла какого-либо или всех объектов 102 вследствие взаимосвязанностей объектов 102. Для того, чтобы устранять эту проблему, последовательность 202 действий для уничтожения объекта может предоставлять механизм 804 синхронизации в отношении всего набора объектов 102 циклического графа 802 объектов (например, монопольную блокировку в отношении всех объектов 102). При приеме запроса 114 уничтожения объекта, чтобы уничтожать один, несколько или все объекты циклического графа 802 объектов, последовательность 202 действий для уничтожения объекта может сначала обеспечивать монопольный доступ к объектам 102 циклического графа 802 объектов через механизм 804 синхронизации. Последовательность 202 действий для уничтожения объектов может затем инициировать уничтожение объекта для объектов 102 согласно последовательности 806 уничтожения (например, уничтожение объектов 102 в конкретном порядке). Отметим, что уничтожение объекта для каждого объекта 102 может выполняться независимо от ссылок 206 на объект 102, удерживаемых другими объектами 102 циклического графа 802 объектов, поскольку механизм 804 синхронизации, удерживаемый последовательностью 202 действий для уничтожения объекта, заранее исключает какие-либо другие потоки 106 из осуществления доступа к объектам 102 и потенциального столкновения с недействительной ссылкой 206 на ранее уничтоженный объект 102. Последовательность 202 действий для уничтожения объекта может поддерживать механизм 804 синхронизации до тех пор, пока последовательность 806 уничтожения в отношении циклического графа 802 объектов не завершится, и все такие объекты 102 не будут уничтожены, таким образом, предоставляя возможность уничтожения циклического графа 802 объектов.
[0069] Фиг. 9 представляет иллюстрацию примерного сценария 900, показывающего шестую разновидность этого второго аспекта, при этом последовательность 202 действий для уничтожения объекта помечает объекты 102, для которых уничтожение объекта было инициировано, но еще не завершено, как помеченные зомби-состоянием 902. В этом примерном сценарии 900, в первое время 908, первый поток 106 инициирует запрос 114 уничтожения объекта, чтобы уничтожать конкретный объект 102, и последовательность 202 действий для уничтожения объекта инициирует уничтожение 102 объекта. Во время инициирования уничтожения объекта последовательность 202 действий для уничтожения объекта может применять к объекту 102 пометку зомби-состоянием 902, указывающим другим потокам 106, что уничтожение объекта для объекта 102 находится в процессе. В ответ на столкновение с неудачей 118 в завершении уничтожения объекта для объекта 102 последовательность 202 действий для уничтожения объекта выполняет создание 210 ссылки, добавляет новую ссылку 206 на объект 102 в список 212 уничтожения объекта в качестве последней ссылки 206 на объект 102 и увеличивает счетчик 204 ссылок с нуля до единицы. Последовательность 202 действий для уничтожения объекта затем ожидает, пока другой поток 106 не возобновит процесс уничтожения объекта. Однако, во второе время 910, прежде чем такое уничтожение объекта завершается, второй поток 106 может инициировать запрос 904 доступа в отношении объекта 102, такой как запрос сохранения данных в объекте 102. Пометка объекта 102 зомби-состоянием 902 может приводить в результате к формированию предупреждения 906 второму потоку 106, указывающего зомби-состояние 902 объекта 102, и предупреждения о том, что данные, считываемые из и/или записываемые в объект 102, могут не быть точными, текущими и/или действительными, и/или могут быть потеряны во время уничтожения объекта. Таким образом, последовательность 202 действий для уничтожения объекта защищает объект 102 от доступа других потоков 106 во время нахождения в процессе уничтожения объекта, и уменьшает исключения, несогласующееся поведение и/или потерю данных, которые могут получаться в результате непреднамеренного доступа потоков 106 к объекту 102 во время уничтожения объекта. Множество таких методик могут быть использованы последовательностью 202 действий для уничтожения объекта, чтобы выполнять уничтожение объекта для объектов 102 в соответствии с методиками, представленными в данном документе.
[0070] E3. Список уничтожения объекта
[0071] Третий аспект, который может изменяться между вариантами осуществления методик, представленных в данном документе, подразумевает использование списка 212 уничтожения объекта последовательностью 202 действий для уничтожения объекта, чтобы хранить ссылки 206 на объекты 102, которые должны быть уничтожены (и, более конкретно, для которых, по меньшей мере, один поток 106 инициировал запрос 114 уничтожения объекта, который привел в результате к неудаче 118).
[0072] Фиг. 10 является иллюстрацией примерного сценария 1000, показывающего первую разновидность этого второго аспекта, при этом последовательность 202 действий для уничтожения объекта предоставляет возможность пометки объекта 102 статусом 1002 удержания, так что объект 102 должен удерживаться даже после освобождения 214 ссылки для последней ссылки в каком-либо потоке 106. Например, объект 102 может содержать пример библиотеки рабочей среды или службы, которая должна сохраняться доступной для потоков 106 вычислительного окружения, даже в то время как потоки 106 в настоящее время не используют объект 102. В этом примерном сценарии 1000 поток 106, который хранит последнюю ссылку 206 на объект 102, инициирует запрос 114 уничтожения объекта, чтобы освобождать последнюю ссылку 206, уменьшать счетчик 204 ссылок с единицы до нуля и уничтожать объект 102. Однако, последовательность 202 действий для уничтожения объекта идентифицирует объект 102 как помеченный как удерживаемый объект 1002, для которого последняя ссылка 206 должна удерживаться вместо освобождения. Последовательность 202 действий для уничтожения объекта может, следовательно, сообщать о неудаче 118 уменьшения счетчика 204 ссылок, освобождения последней ссылки 206 и/или уничтожения объекта 102. Вместо этого, последовательность 202 действий для уничтожения объекта может сохранять последнюю ссылку 206 в списке 212 уничтожения объекта, еще может отклонять запросы различных потоков 106 на освобождение ссылки 206 и/или уменьшение счетчика 204 ссылок с единицы до нуля. Последовательность 202 действий уничтожения объекта, следовательно, использует список 212 уничтожения объекта в качестве кэша удерживаемого объекта, который хранит кэшированную ссылку 206 на удерживаемый объект 102, тем самым, гарантируя, что объект 102 еще не уничтожен, в то же время сохраняя пометку в качестве удерживаемого объекта 1002. Кроме того, в то время как кэш удерживаемого объекта хранит кэшированную ссылку 206 на удерживаемый объект 1002, другие ссылки 206 на удерживаемый объект 1002 в соответствующих потоках помечаются как слабая ссылка на удерживаемый объект 1002 и не отслеживаются посредством счетчика 204 ссылок. В ответ на запрос удаления пометки объекта 102 в качестве удерживаемого объекта 1002 последовательность 202 действий для уничтожения объекта может изменять любые ссылки 206 в потоках 106 на сильные ссылки 206 (и может увеличивать счетчик 204 ссылок соответственно), так что освобождение всех таких ссылок 204 вызывает уничтожение объекта для объекта 102.
[0073] В качестве второй разновидности этого третьего аспекта потоки 106 и последовательность 202 действий для уничтожения объекта могут взаимодействовать различными способами, чтобы сообщать о списке 212 уничтожения объекта, включающими в себя добавление ссылки 206 на объект 102 в список 212 уничтожения объекта, для которого различные потоки 106 могут инициировать запрос 114 уничтожения объекта.
[0074] Фиг. 11 представляет иллюстрацию примерного сценария 1100, показывающего две таких методики, посредством которых потоки 106 и последовательность 202 действий для уничтожения объекта используют список 212 уничтожения объекта, чтобы координировать уничтожение объекта для объекта 102. В качестве первого такого примера 1106 первый поток 106 может инициировать запрос 114 уничтожения объекта, во время которого последовательность 202 действий для уничтожения объекта может сталкиваться с неудачей 118, побуждающей последовательность 202 действий для уничтожения объекта добавлять новую ссылку 206 в список 212 уничтожения объекта в качестве последней ссылки на объект 102. Дополнительно, в ответ на добавление новой ссылки 206 на объект 102 в список 212 уничтожения объекта, последовательность 202 действий для уничтожения объекта может дополнительно уведомлять второй поток 106, который также осуществляет доступ к объекту 102, о добавлении новой ссылки 206 на объект 102 в список 212 уничтожения объекта. Уведомление 1102 может побуждать второй поток 106 освобождать последнюю ссылку 206, таким образом, побуждая последовательность 202 действий для уничтожения объекта повторно инициировать процесс уничтожения объекта от имени второго потока 106.
[0075] В этой разновидности множество методик может быть использовано, посредством которых последовательность 202 действий для уничтожения объекта идентифицирует второй поток 106 в качестве получателя уведомления 1102. В качестве первого такого примера уведомление 1102 может также инициироваться последовательностью 202 действий для уничтожения объекта и/или посредством списка 212 уничтожения объекта при приеме последней ссылки 206 на объект 102. В качестве второго такого примера второй поток 106 может дополнительно содержать вышестоящий поток 106, который является вышестоящим по отношению к первому потоку 106, и который разделяет доступы к объекту 106 (например, поток диспетчеризации рабочей среды, который организует первый поток 106), и последовательность 202 действий для уничтожения объекта может уведомлять вышестоящий поток 106 о добавлении новой ссылки 206 на объект 102 в список 212 уничтожения объекта. В качестве третьего такого примера последовательность 202 действий для уничтожения объекта может искать среди совокупности потоков для потоков 106, которые выполняются процессором, чтобы идентифицировать второй поток в качестве одного из нескольких потоков, которые имеют доступ, и/или в настоящее время осуществляют доступ или ранее осуществляли доступ, к объекту 102. В качестве четвертого такого примера уведомление 1102 может быть доставлено второму потоку 106 множеством способов. Например, второй поток 106 может дополнительно содержать очередь сообщений для сообщений, которые должны быть доставлены второму потоку 106, и последовательность 202 действий для уничтожения объекта может вставлять уведомление 1102 в очередь сообщений второго потока 106, при этом сообщение уведомляет второй поток 106 о добавлении новой ссылки 206 на объект 102 в список 212 уничтожения объекта. В качестве пятого такого примера, если второй поток 106, которому уведомление 1102 должно быть доставлено, находится в подвешенном состоянии, последовательность 202 действий для уничтожения объекта может активизировать второй поток 106, чтобы обрабатывать уведомление 1102 и продолжать уничтожение объекта для объекта 102.
[0076] Фиг. 11 также иллюстрирует второй пример 1108 взаимодействия между потоками 106 и списком 212 уничтожения объекта, при этом соответствующие потоки 106 периодически просматривают список 212 уничтожения объекта, чтобы идентифицировать присутствие ссылок 206 на объекты 102, к которым в настоящее время и/или ранее осуществлял доступ поток 106. В этом втором примере 1108 первый поток 106 может инициировать запрос 114 уничтожения объекта, во время которого последовательность 202 действий для уничтожения объекта может сталкиваться с неудачей 118, побуждающей последовательность 202 действий для уничтожения объекта добавлять новую ссылку 206 в список 212 уничтожения объекта в качестве последней ссылки на объект 102. Второй поток 106 может опрашивать 1104 список 212 уничтожения объекта и, при обнаружении последней ссылки 206 на объект 102, может определять, осуществляет ли в настоящий момент и/или осуществлял ли доступ к объекту 102 второй поток 102. В ответ на определение, что второй поток 106 имеет такое соотношение с объектом 102, второй поток 106 может удалять последнюю ссылку 206 на объект 102 из списка 212 уничтожения объекта и выполнять освобождение 214 ссылки для последней ссылки 206, тем самым, инициируя возобновление последовательности 202 действий для уничтожения объекта от имени второго потока 106. Множество таких методик может быть использовано потоками 106 и последовательностью 202 действий для уничтожения объекта для обмена данными между ними об обработке уничтожения объекта для объектов 102 в соответствии с методиками, представленными в данном документе.
[0077] F. Вычислительное окружение
[0078] Фиг. 12 и последующее обсуждение предоставляют краткое, общее описание подходящего вычислительного окружения, чтобы реализовывать варианты осуществления одного или более положений, изложенных в данном документе. Операционное окружение на фиг. 12 является только одним примером подходящего операционного окружения и не предназначено для того, чтобы предлагать какие-либо ограничения относительно области использования или функциональности операционного окружения. Примерные вычислительные устройства включают в себя, но не только, персональные компьютеры, серверные компьютеры, карманные или настольные устройства, мобильные устройства (такие как мобильные телефоны, персональные цифровые помощники (PDA), мультимедийные проигрыватели и т.п.), мультипроцессорные системы, бытовую электронику, мини-компьютеры, универсальные компьютеры, распределенные вычислительные окружения, которые включают в себя любые из вышеуказанных систем или устройств, и т.п.
[0079] Хотя не требуется, варианты осуществления описываются в общем контексте "машиночитаемых инструкций", исполняемых одним или более вычислительными устройствами. Машиночитаемые инструкции могут быть распределены на машиночитаемых носителях (обсуждается ниже). Машиночитаемые инструкции могут быть реализованы как программные модули, такие как функции, объекты, прикладные программные интерфейсы (API), структуры данных и т.п., которые выполняют отдельные задачи или реализуют отдельные абстрактные типы данных. Типично, функциональность машиночитаемых инструкций может быть объединена или распределена, как желательно в различных вариантах осуществления.
[0080] Фиг. 12 иллюстрирует пример системы 1200, содержащей вычислительное устройство 1202, сконфигурированное, чтобы реализовывать один или более вариантов осуществления, предоставленных в данном документе. В одной конфигурации вычислительное устройство 1202 включает в себя, по меньшей мере, один процессор 1206 и память 1208. В зависимости от точной конфигурации и типа вычислительного устройства память 1208 может быть энергозависимой (такой как RAM, например), энергонезависимой (такой как ROM, флэш-память и т.д., например) или некоторой комбинацией обеих. Эта конфигурация иллюстрирована на фиг. 12 пунктирной линией 1204.
[0081] В других вариантах осуществления устройство 1202 может включать в себя дополнительные признаки и/или функциональность. Например, устройство 1202 может также включать в себя дополнительное запоминающее устройство (например, съемное и/или несъемное), включающее в себя, но не только, магнитное запоминающее устройство, оптическое запоминающее устройство и т.п. Такое дополнительное запоминающее устройство иллюстрируется на фиг. 12 посредством запоминающего устройства 1210. В одном варианте осуществления машиночитаемые инструкции, чтобы реализовывать один или более вариантов осуществления, предоставленных в данном документе, могут быть в запоминающем устройстве 1210. Запоминающее устройство 1210 может также хранить другие машиночитаемые инструкции, чтобы реализовывать операционную систему, прикладную программу и т.п. Машиночитаемые инструкции могут быть загружены в память 1208 для выполнения процессором 1206, например.
[0082] Термин "машиночитаемые носители", когда используется в данном документе, включает в себя машиночитаемые запоминающие устройства, которые исключают другие формы машиночитаемых носителей, содержащих среду передачи данных, такую как сигналы. Такие машиночитаемые запоминающие устройства могут быть энергозависимыми и/или энергонезависимыми, съемными и/или несъемными и могут подразумевать различные типы физических устройств, хранящих машиночитаемые инструкции или другие данные. Память 1208 и запоминающее устройство 1210 являются примерами компьютерных носителей хранения данных. Машиночитаемые носители хранения включают в себя, но не только, RAM, ROM, EEPROM, флэш-память или другую технологию памяти, CD-ROM, цифровые универсальные диски (DVD) или другое оптическое запоминающее устройство, магнитные кассеты, магнитную ленту и запоминающее устройство на магнитных дисках или другие магнитные запоминающие устройства.
[0083] Устройство 1202 может также включать в себя соединение(я) 1216 передачи данных, которое позволяет устройству 1202 связываться с другими устройствами. Соединение(я) 1216 передачи данных может включать в себя, но не только, модем, карту сетевого интерфейса (NIC), интегрированный сетевой интерфейс, радиочастотный передатчик/приемник, инфракрасный порт, USB-соединение или другие интерфейсы для соединения вычислительного устройства 1202 с другими вычислительными устройствами. Соединение(я) 1216 передачи данных может включать в себя проводное соединение или беспроводное соединение. Соединение(я) 1216 передачи данных может передавать и/или принимать среды передачи данных.
[0084] Термин "машиночитаемые носители" может включать в себя среду передачи данных. Среда передачи данных типично осуществляет машиночитаемые инструкции или другие данные в "модулированном информационном сигнале", таком как несущая волна или другой транспортный механизм, и включает в себя любую среду доставки информации. Термин "модулированный информационный сигнал" означает сигнал, который имеет одну или более своих характеристик, заданных или изменяемых таким образом, чтобы кодировать информацию в сигнале.
[0085] Устройство 1202 может включать в себя устройство(а) 1214 ввода, такие как клавиатура, мышь, перо, устройство голосового ввода, устройство сенсорного ввода, инфракрасные камеры, устройства видеоввода и/или любое другое устройство ввода. Устройство(а) 1212 вывода, такое как один или более дисплеев, динамиков, принтеров и/или любое другое устройство вывода, может также быть включено в устройство 1202. Устройство(а) 1214 ввода и устройство(а) 1212 вывода могут быть подключены к устройству 1202 через проводное соединение, беспроводное соединение или любую их комбинацию. В одном варианте осуществления устройство ввода или устройство вывода от другого вычислительного устройства могут быть использованы в качестве устройств(а) 1214 ввода или устройств(а) 1212 вывода для вычислительного устройства 1202.
[0086] Компоненты вычислительного устройства 1202 могут быть соединены различными межсоединениями, такими как шина. Такие межсоединения могут включать в себя шину взаимодействия периферийных компонентов (PCI), такую как PCI-Express, универсальную последовательную шину (USB), firewire (IEEE 1394), оптическую шинную структуру и т.п. В другом варианте осуществления компоненты вычислительного устройства 1202 могут быть взаимосвязаны посредством сети. Например, память 1208 может состоять из множества физических модулей памяти, расположенных в различных физических местоположениях, взаимосвязанных посредством сети.
[0087] Специалисты в данной области техники поймут, что устройства хранения, использованные, чтобы хранить машиночитаемые инструкции, могут быть распределены по сети. Например, вычислительное устройство 1220, доступное по сети 1218, может хранить машиночитаемые инструкции, чтобы реализовывать один или более вариантов осуществления, предоставленных в данном документе. Вычислительное устройство 1202 может осуществлять доступ к вычислительному устройству 1220 и загружать часть или все машиночитаемые инструкции для исполнения. Альтернативно, вычислительное устройство 1202 может загружать куски машиночитаемых инструкций по необходимости, или некоторые инструкции могут исполняться в вычислительном устройстве 1202, а некоторые в вычислительном устройстве 1220.
[0088] G. Использование терминов
[0089] Хотя предмет изобретения описан на языке, характерном для структурных признаков и/или технологических этапов, следует понимать, что объем изобретения, определяемый прилагаемой формулой изобретения, не обязательно ограничен характерными признаками или этапами, описанными выше. Скорее, характерные признаки и действия, описанные выше, раскрываются как примерные формы реализации формулы изобретения.
[0090] При использовании в данной заявке термины "компонент", "модуль", "система", "интерфейс" и т.п. обычно предназначены, чтобы ссылаться на связанную с компьютером объектную сущность, либо аппаратные средства, сочетание аппаратных средств и программного обеспечения, программное обеспечение, либо программное обеспечение в ходе исполнения. Например, компонент может быть, но не только, процессом, запущенным в процессоре, процессором, объектом, исполняемым файлом, потоком исполнения, программой и/или компьютером. В качестве иллюстрации, и приложение, запущенное на контроллере, и контроллере могут быть компонентом. Один или более компонентов могут постоянно размещаться внутри процесса и/или потока исполнения, и компонент может быть локализован на компьютере и/или распределен между двумя и более компьютеров.
[0091] Кроме того, заявляемое изобретение может быть реализовано в виде способа, устройства или промышленного изделия с использованием стандартных технологий программирования и/или проектирования для производства программного обеспечения, микропрограммного обеспечения, аппаратных средств или любого их сочетания, чтобы управлять компьютером для реализации раскрытого изобретения. Термин "промышленное изделие" при использовании в данном документе имеет намерение содержать в себе компьютерную программу, доступную из любого машиночитаемого устройства, носителя или среды. Конечно, специалисты в данной области техники признают, что многие модификации могут быть сделаны по отношению к этой конфигурации без отступления от рамок и сущности заявленного изобретения.
[0092] Различные операции вариантов осуществления предоставлены в данном документе. В одном варианте осуществления одна или более описанных операций могут составлять машиночитаемые инструкции, сохраненные на одном или более машиночитаемых носителях, которые, если исполняются вычислительным устройством, будут заставлять вычислительное устройство выполнять описанные операции. Порядок, в котором некоторые или все операции описаны, не должен истолковываться так, чтобы подразумевать, что эти операции обязательно зависят от порядка. Альтернативное упорядочивание будет принято во внимание специалистом в данной области техники, имеющим пользу от этого описания. Дополнительно, будет понятно, что не все операции обязательно присутствуют в каждом варианте осуществления, предоставленном в данном документе.
[0093] Любой аспект или конструкция, описанные в данном документе как "примерные", необязательно должны быть истолкованы как преимущественные в сравнении с другими аспектами или конструкциями. Скорее, использование слова "примерный" предназначается, чтобы представлять один возможный аспект и/или реализацию, которая может принадлежать методикам, представленным в данном документе. Такие примеры не являются необходимыми для таких методик или не предполагают быть ограничивающими. Различные варианты осуществления таких методик могут включать в себя такой пример, отдельно или в сочетании с другими отличительными признаками, и/или может изменять и/или пропускать иллюстрированный пример.
[0094] При использовании в данной заявке термин "или" имеет намерением означать включающее "или" вместо исключающего "или". Т.е., если не указано иное или не очевидно из контекста, "X применяет A или B" имеет намерением означать любую из естественных включающих перестановок. Иными словами, если X применяет A; X применяет B; или X применяет как A, так и B, то "X применяет A или B" удовлетворяется в любом из вышеуказанных случаев. Помимо этого, упоминание в единственном числе при использовании в данной заявке и прилагаемой формуле изобретения, в общем, должно истолковываться так, чтобы означать "один или более", если иное не указано или не очевидно из контекста, что направлено на форму единственного числа.
[0095] Также, хотя изобретение было показано и описано в отношении одной или более реализаций, эквивалентные изменения и модификации станут понятными специалистам в данной области техники на основе прочтения и понимания этого описания и сопутствующих чертежей. Изобретение охватывает все такие модификации и изменения и ограничено только объемом, определяемым последующей формулой изобретения. В частности, что касается различных функций, выполняемых посредством вышеописанных компонентов (например, элементов, ресурсов и т.д.), термины, использованные для описания таких компонентов, подразумеваются соответствующими, пока не указано иное, любому компоненту, который выполняет указанную функцию описанного компонента (например, который является функционально эквивалентным), даже если не является структурным эквивалентом раскрытой структуре, которая выполняет функцию в иллюстрированных в данном документе примерных реализациях изобретения. Помимо этого, хотя конкретный признак изобретения, возможно, раскрыт относительно только одной из нескольких реализаций, этот признак может комбинироваться с одним или более признаками других реализаций, что может быть желательным и предпочтительным для любого данного или конкретного варианта применения. Более того, в тех рамках, в которых термины "включает в себя", "имеющий", "имеет", "с" или их варианты используются либо в подробном описании, либо в формуле изобретения, такие термины должны быть включающими образом, аналогичным термину "содержащий".