Читаем Linux API. Исчерпывающее руководство полностью

times() yields: user CPU=0.00; system CPU: 0.00

After getppid() loop:

clock() returns: 2960000 clocks-per-sec (2.96 secs)

times() yields: user CPU=1.09; system CPU: 1.87

Листинг 10.5. Извлечение затраченного процессом времени ЦП

time/process_time.c

#include

#include

#include "tlpi_hdr.h"

static void /* Вывод сообщения, на которое указывает 'msg',

и показателей времени процесса */

displayProcessTimes(const char *msg)

{

struct tms t;

clock_t clockTime;

static long clockTicks = 0;

if (msg!= NULL)

printf("%s", msg);

if (clockTicks == 0) { /* Извлечение тиков часов в первом вызове */

clockTicks = sysconf(_SC_CLK_TCK);

if (clockTicks == -1)

errExit("sysconf");

}

clockTime = clock();

if (clockTime == -1)

errExit("clock");

printf(" clock() returns: %ld clocks-per-sec (%.2f secs)\n",

(long) clockTime, (double) clockTime / CLOCKS_PER_SEC);

if (times(&t) == -1)

errExit("times");

printf(" times() yields: user CPU=%.2f; system CPU: %.2f\n",

(double) t.tms_utime / clockTicks,

(double) t.tms_stime / clockTicks);

}

int

main(int argc, char *argv[])

{

int numCalls, j;

printf("CLOCKS_PER_SEC=%ld sysconf(_SC_CLK_TCK)=%ld\n\n",

(long) CLOCKS_PER_SEC, sysconf(_SC_CLK_TCK));

displayProcessTimes("At program start: \n");

numCalls = (argc > 1)? getInt(argv[1], GN_GT_0, "num-calls")

: 100000000;

for (j = 0; j < numCalls; j++)

(void) getppid();

displayProcessTimes("After getppid() loop: \n");

exit(EXIT_SUCCESS);

}

time/process_time.c

10.8. Резюме

Реальное время соответствует обычному определению времени. Когда реальное время отмеряется от какого-то стандартного момента, мы называем его календарным временем; затраченным временем называется время, отмеряемое от какого-либо момента в жизни процесса (обычно от его запуска).

Время процесса представляет собой время центрального процессора, использованное процессом, и разбивается на пользовательский и системный компоненты.

Получить и установить значение системных часов (то есть календарного времени, замеренного в секундах от начала отсчета (Epoch)) позволяют различные системные вызовы, а некоторые библиотечные функции дают возможность выполнять преобразования между календарным временем и другими форматами времени, включая разделенное время (время, разбитое на компоненты) и время в виде читаемых символьных строк. Описание этих преобразований не обходится без рассмотрения вопросов локалей и интернационализации.

Использование времени и даты, а также вывод их на экран важны для многих приложений, и функции, рассмотренные в этой главе, будут еще часто упоминаться на протяжении всей книги. Дополнительно вопросы замеров времени мы также рассмотрим в главе 23.

Дополнительные сведения

Подробности, касающиеся способов замеров времени ядром Linux, можно найти в [Love, 2010].

Подробно о часовых поясах и интернационализации вы можете прочитать в руководстве по GNU-библиотеке C (по адресу http://www.gnu.org/). Подробности относительно локалей также можно найти в документах по SUSv3.

10.9. Упражнение

10.1. Возьмем систему, где вызов sysconf(_SC_CLK_TCK) возвращает значение 100. Сколько времени пройдет, пока значение типа clock_t, возвращенное функцией times(), снова превратится в 0, при условии, что оно представлено 32-разрядным целым числом? Выполните такое же вычисление для значения CLOCKS_PER_SEC, возвращенного функцией clock().

<p>11. Системные ограничения и возможности</p></span><span>

Каждая реализация UNIX накладывает ограничения (limits) на различные системные характеристики и ресурсы и предоставляет возможности (options), определенные в различных стандартах (или отказывает в их предоставлении). Например, можно определить следующее.

• Сколько файлов процесс может одновременно держать открытыми?

• Поддерживает ли система сигналы реального времени?

• Какое наибольшее значение может быть сохранено в переменной типа int?

• Насколько большим может быть список аргументов программы?

• Какова максимальная длина путевого имени?

Можно, конечно, жестко задать ограничения и возможности в самом приложении, но это снизит портируемость, поскольку все ограничения и возможности могут варьироваться:

• в различных реализациях UNIX. Хотя в отдельно взятых реализациях ограничения и возможности могут быть четко прописаны, от реализации к реализации они могут варьироваться. В качестве примера такого ограничения можно привести максимальное значение, которое может быть сохранено в int-переменной;

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

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных