# Встроенные библиотеки

# Профилировщик

Собирает информацию о времени выполнения каждой вызываемой функции на нужном участке кода и выводит ее в виде таблицы. Он позволяет найти "горячие" функции (которые вызываются чаще всего либо занимают большой процент времени выполнения) и оптимизировать код программы. Ниже приведен пример запуска профилировщика:

# профилирует выполнение функции Функция1()

Функция Профилирование()
{
   Профайлер.НачатьПрофилирование()
   Функция1()
   перем статистика = Профайлер.ЗакончитьПрофилирование()

   перем файл = Новый стд.фс.Файл("профиль.txt", "w")
   файл.ЗаписатьСтроку(статистика.Форматировать())
}

Функция Функция1()
{
   Для(перем сч = 1; сч < 3; сч++)
      Пауза(100)

   Функция2()
}

Функция Функция2()
{
   Для(перем сч1 = 1; сч1 < 50; сч1++)
      Для(перем сч2 = 1; сч2 < 1000; сч2++)
         перем п = 1
}

В результате запуска из консоли функции Профилирование() в файл профиль.txt была записана статистика выполнения кода:

Function   Self               Total              Count   Location

Пауза       14.94% (201 ms)    14.94% (201 ms)       2   <anonymous>:1:1
Функция1       0.04% (0 ms)   99.99% (1351 ms)       1   Common\prg\admin.prg:11:1
Функция2   85.00% (1148 ms)   85.00% (1148 ms)       1   Common\prg\admin.prg:19:1

Здесь Total - общее время выполнения функции, Self - время выполнения функции минус время выполнения вызванных ею функций, Count - количество вызовов. Ссылка на документацию

# Фоновые потоки

Модуль для работы с фоновыми потоками предоставляет более простой и безопасный (по сравнению с мьютексами) способ распараллеливания кода, основанный на каналах для передачи данных между потоками. Интерфейс модуля отдаленно похож на спецификацию Worker API из JavaScript.