ttrace
-
НАЗВАНИЕ
- ttrace — Инициализация интерпретатора на основе отслеживания
- СИНТАКСИС
- ОПИСАНИЕ
- КОМАНДЫ ПОЛЬЗОВАТЕЛЯ
-
ttrace::eval arg ?arg . . .?
- ttrace::enable
- ttrace::disable
- ttrace::cleanup
- ttrace::update ?epoch?
- ttrace::getscript
- ttrace::enable
-
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::atdisable cmd arglist body
Имя
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