Spec-Zone.ru › Tcl/Tk

ttrace

НАЗВАНИЕ
ttrace — Инициализация интерпретатора на основе отслеживания
СИНТАКСИС
ОПИСАНИЕ
КОМАНДЫ ПОЛЬЗОВАТЕЛЯ
ttrace::eval arg ?arg . . .?
ttrace::enable
ttrace::disable
ttrace::cleanup
ttrace::update ?epoch?
ttrace::getscript
КОМАНДЫ ОБРАБОТЧИКОВ
ttrace::atenable cmd arglist body
ttrace::atdisable cmd arglist body
ttrace::addtrace cmd arglist body
ttrace::addscript name body
ttrace::addresolver cmd arglist body
ttrace::addcleanup body
ttrace::addentry cmd var val
ttrace::getentry cmd var
ttrace::getentries cmd ?pattern?
ttrace::delentry cmd
ttrace::preload cmd
ОБСУЖДЕНИЕ
СМОТРИТЕ ТАКЖЕ
КЛЮЧЕВЫЕ СЛОВА

Имя

ttrace — Инициализация интерпретатора на основе отслеживания

Синтаксис

пакет требуется Tcl 8 .4
пакет требуется Поток ?2 .8?
ttrace::evalarg ?arg . . .?
ttrace::enable
ttrace::disable
ttrace::cleanup
ttrace::update ?epoch?
ttrace::getscript
ttrace::atenablecmdarglistbody
ttrace::atdisablecmdarglistbody
ttrace::addtracecmdarglistbody
ttrace::addscriptnamebody
ttrace::addresolvercmdarglistbody
ttrace::addcleanupbody
ttrace::addentrycmdvarval
ttrace::getentrycmdvar
ttrace::getentriescmd ?pattern?
ttrace::delentrycmd
ttrace::preloadcmd

Описание

Этот пакет создаёт основу для по запросу репликации состояния интерпретатора между потоками в многопоточной приложении. Он опирается на механику отслеживания команд Tcl и команду и механизм Tcl unknown.

Пакет требует расширения Tcl для потоков, но может быть альтернативно использован автономно в AOLserver, масштабируемом веб-сервере от America Online.

Вкратце, короткий пример, иллюстрирующий использование ttrace с расширением Tcl для потоков:

% package require Ttrace
    2	.8	.0

    % set t1 [thread::create {package require Ttrace; thread::wait}]
    tid0x1802800

    % ttrace::eval {proc test args {return test-[thread::id]}}
    % thread::send $t1 test
    test-tid0x1802800

    % set t2 [thread::create {package require Ttrace; thread::wait}]
    tid0x1804000

    % thread::send $t2 test
    test-tid0x1804000

Как видно из примера, команды ttrace::eval и ttrace::update используются для создания определения простой процедуры Tcl на уровне потоков и репликации этого определения во всех уже существующих или созданных впоследствии потоках. Для AOLserver, только вновь созданные потоки фактически получают изменения эпохи. Для расширения Tcl для потоков, все потоки, созданные с помощью расширения, автоматически обновляются. Если выполнение команды привело к ошибке Tcl, никакой передачи состояния не происходит.

Команды пользователя

В этом разделе описываются команды уровня пользователя. Эти команды могут быть использованы авторами сценариев для управления выполнением фреймворка отслеживания.
ttrace::eval arg ?arg . . .?
Эта команда конкатенирует заданные аргументы и выполняет полученную команду Tcl с включённым фреймворком отслеживания. Если выполнение команды прошло успешно, она предпринимает необходимые шаги для автоматического распространения изменения эпохи отслеживания на все потоки в приложении. Для AOLserver, только вновь созданные потоки фактически получают изменение эпохи. Для расширения Tcl для потоков, все потоки, созданные с помощью расширения, автоматически обновляются. Если выполнение команды привело к ошибке Tcl, никакой передачи состояния не происходит.

Это самая важная команда пользователя пакета, так как она оборачивает большинство команд, описанных ниже. Это значительно упрощает задачу, так как пользователю нужно узнать только эту (одну) команду, чтобы эффективно использовать пакет. Другие команды, как описано ниже, включены в основном для полноты.

ttrace::enable
Активирует все зарегистрированные обработчики в фреймворке и начинает новую эпоху отслеживания. Эпоха отслеживания охватывает все изменения, внесенные в интерпретатор в течение времени, пока отслеживания активны.
ttrace::disable
Деактивирует все зарегистрированные обработчики в фреймворке и закрывает текущую эпоху отслеживания.
ttrace::cleanup
Используется для очистки всех загруженных по требованию ресурсов в интерпретаторе. Он эффективно возвращает интерпретатор Tcl в первоначальное состояние.
ttrace::update ?epoch?
Используется для обновления состояния интерпретатора, чтобы соответствовать необязательной эпохе отслеживания ?epoch?. Если необязательный ?epoch? не указан, используется самая последняя эпоха отслеживания.
ttrace::getscript
Возвращает синтезированный скрипт Tcl, который можно выполнить в любом интерпретаторе. Этот скрипт подготавливает сцену для команды Tcl unknown, чтобы она могла загрузить отслеженные ресурсы из базы данных в оперативной памяти. Обычно эта команда автоматически вызывается другими командами более высокого уровня, такими как ttrace::eval и ttrace::update.

Команды обработчиков

Заранее: пакет уже включает обработчики для отслеживания следующих команд Tcl: proc, namespace, variable, load и rename. Дополнительно предоставляется набор обработчиков для отслеживания ресурсов (объектов, классов) для XOTcl v1.3.8+, расширения для объектно-ориентированного программирования на Tcl. Это даёт надёжную основу для решения большинства реальных задач и служит примером для тех, кто хочет настроить пакет для своих конкретных потребностей.

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

ttrace::atenable cmd arglist body
Регистрирует обработчик Tcl, который должен быть активирован при ttrace::enable. Зарегистрированные обработчики активируются в порядке очереди FIFO. Определение обработчика включает имя обработчика, cmd, список аргументов обработчика, arglist, и тело обработчика, body. По сути, это напоминает интерфейс вызова стандартной команды Tcl proc.
ttrace::atdisable cmd arglist body
Регистрирует обработчик Tcl, который должен быть активирован при ttrace::disable. Зарегистрированные обработчики активируются в порядке очереди FIFO. Определение обработчика включает имя обработчика, cmd, список аргументов обработчика, arglist, и тело обработчика, body. По сути, это напоминает интерфейс вызова стандартной команды Tcl proc.
ttrace::addtrace cmd arglist body
Регистрирует обработчик Tcl, который должен быть активирован для отслеживания команды Tcl cmd. Определение обработчика включает имя команды Tcl для отслеживания, cmd, список аргументов обработчика, arglist, и тело обработчика, body. По сути, это напоминает интерфейс вызова стандартной команды Tcl proc.
ttrace::addscript name body
Регистрирует обработчик Tcl, который должен быть активирован для создания скрипта Tcl для передачи другим интерпретаторам. Этот скрипт используется для подготовки сцены для команды Tcl unknown. Зарегистрированные обработчики активируются в порядке очереди FIFO. Определение обработчика включает имя обработчика, name, и тело обработчика, body.
ttrace::addresolver cmd arglist body
Регистрирует обработчик Tcl, который должен быть активирован перегруженной командой Tcl unknown. Зарегистрированные обработчики активируются в порядке очереди FIFO. Этот обработчик используется для разрешения ресурса и загрузки ресурса в текущий интерпретатор.
ttrace::addcleanup body
Регистрирует обработчик Tcl, который должен быть активирован командой trace::cleanup. Зарегистрированные обработчики активируются в порядке очереди FIFO.
ttrace::addentry cmd var val
Добавляет одну запись в именованную базу данных в оперативной памяти.
ttrace::getentry cmd var
Возвращает значение записи из именованной базы данных в оперативной памяти.
ttrace::getentries cmd ?pattern?
Возвращает имена всех записей из именованной базы данных в оперативной памяти.
ttrace::delentry cmd
Удаляет запись из именованной базы данных в оперативной памяти.
ttrace::preload cmd
Регистрирует команду Tcl для загрузки в интерпретатор. Команды, зарегистрированные таким образом, всегда будут частью интерпретатора и не будут загружаться по требованию командой Tcl unknown.

Обсуждение

Общие подходы к репликации состояния с самоанализом используют пользовательский скрипт Tcl для анализа работающего интерпретатора и синтезируют другой скрипт Tcl для репликации этого состояния в другом интерпретаторе. В отличие от этого, этот пакет использует отслеживание команд Tcl. Отслеживание команд регистрируется для выбранных команд Tcl, таких как proc, namespace, load и других стандартных (и/или пользовательских) команд Tcl. При активации эти отслеживания создают базу данных ресурсов в оперативной памяти. Эта база данных используется как хранилище ресурсов для (перегруженной) команды Tcl unknown, которая создаёт запрашиваемый ресурс в интерпретаторе по требованию. Таким образом, пользователи могут обновить только один интерпретатор (главный) в одном потоке и реплицировать состояние этого интерпретатора (или часть его) в другие потоки/интерпретаторы в процессе.

Немедленное преимущество такого подхода — значительно меньший объем памяти приложения и гораздо более быстрое создание потоков. Благодаря тому, что все необходимые процедуры (и другие ресурсы) не загружаются в каждый поток во время инициализации потока, а откладываются до момента фактического обращения к ресурсу, можно добиться значительного улучшения как потребления памяти, так и времени инициализации потоков. Некоторые тесты показали, что объем памяти многопоточного приложения Tcl уменьшился более чем в три раза, а время запуска потока сократилось примерно в 50 раз. Обратите внимание, что ваши результаты могут отличаться. Другие преимущества включают более точный контроль над тем, что (и когда) дублируется от главного потока к другим потокам/интерпретаторам Tcl.

См. также

поток, tpool, tsv

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ThreadCmd/ttrace.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API