Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » [решено] Откуда берутся микросекунды?

Ответить
Настройки темы
[решено] Откуда берутся микросекунды?

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204


Конфигурация

Профиль | Отправить PM | Цитировать


Например, в PHP есть функция microtime(), выдающая текущее значение микросекунд. Секунды - ещё ладно, можно там посчитать (хотя тоже не в курсе, но часы-то делают электронные). А вот микросекунды откуда берутся? Неужели таймер замеряет всю эту ерунду, затрачивая бесценные ресурсы процессорного (или ещё какого) времени?
Или это рандомом выдаётся?

Отправлено: 16:13, 19-09-2007

 

Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


Цитата CyberDaemon:
А еще 8088 был - урезанный 8086, 16-разрядный унутре, но 8-разрядный снаружи по шине. »
Это не считается, это было физическое мультиплексирование. Логическая разрядность при этом не менялась.

У последовательных шин и интерфейсов вообще два проводка, дык их никто двухбитными не считает же

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий


Отправлено: 10:44, 20-09-2007 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Цитата kim-aa:
Байт он всегда байт - 8 бит. »
Нет, я немного не о том. Что есть байт? Физической сущности у него нет. Это всего лишь условность. Типа как в ящике - 6 бутылок водки газировки. Просто так принято.
Если бы процессоры сразу были 32-разрядные, зачем стоило бы оговаривать байт, как 8 бит?
Цитата kim-aa:
Кстати, у первого процессора 4004, если мне память не изменяет, машинное слово равнялось полубайту. »
Ну это ж вообще калькулятор))

Отправлено: 18:44, 20-09-2007 | #12


Аватара для detrin

Ветеран


Сообщения: 540
Благодарности: 42

Профиль | Отправить PM | Цитировать


Немного увлекаюсь программированием, так вот в WinAPI есть такая функция - GetTickCount
Цитата:
Считывает вpемя, пpошедшее с момента запуска системы.
Возвpащаемое значение - Пpошедшее вpемя (в миллисекундах).
Достаточно сравнить параметр GetTickCount в начале и в конце нужного периода, чтобы получить интервал времени в микросекундах. А в PHP функция microtime() скорее всего использует вышеуказанную функцию WinAPI.

В WinAPI как известно есть только те функции и процедуры которые используются самой Windows. Рискну предположить, что эти "микросекунды" необходимы для распределения процессорного времени между приложениями. Ведь пока еще не придумали процессор позволяющий одновременно обрабатывать несколько десятков задач и эти функции берет на себя ОС.

-------
Лучше ничего не делать, чем делать ничего.


Отправлено: 23:55, 23-09-2007 | #13


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата:
А в PHP функция microtime() скорее всего использует вышеуказанную функцию WinAPI.
не факт php изначально проектировался под unix системы, а там API другой.

Код: Выделить весь код
/*
   +----------------------------------------------------------------------+
   | PHP Version 5                                                        |
   +----------------------------------------------------------------------+
   | Copyright (c) 1997-2006 The PHP Group                                |
   +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.php.net/license/3_01.txt                                  |
   | If you did not receive a copy of the PHP license and are unable to   |
   | obtain it through the world-wide-web, please send a note to          |
   | license@php.net so we can mail you a copy immediately.               |
   +----------------------------------------------------------------------+
   | Author: Paul Panotzki - Bunyip Information Systems                   |
   +----------------------------------------------------------------------+
 */

/* $Id: microtime.c,v 1.53.2.2 2006/01/01 12:50:15 sniper Exp $ */

#include "php.h"

#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef PHP_WIN32
#include "win32/time.h"
#elif defined(NETWARE)
#include <sys/timeval.h>
#include <sys/time.h>
#else
#include <sys/time.h>
#endif
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>

#include "microtime.h"
#include "ext/date/php_date.h"

#define NUL  '\0'
#define MICRO_IN_SEC 1000000.00
#define SEC_IN_MIN 60

#ifdef HAVE_GETTIMEOFDAY
static void _php_gettimeofday(INTERNAL_FUNCTION_PARAMETERS, int mode)
{
	zend_bool get_as_float = 0;
	struct timeval tp = {0};
	struct timezone tz = {0};

	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &get_as_float) == FAILURE) {
		return;
	}

	if (gettimeofday(&tp, &tz)) {
		RETURN_FALSE;
	}

	if (get_as_float) {
		RETURN_DOUBLE((double)(tp.tv_sec + tp.tv_usec / MICRO_IN_SEC));
	}

	if (mode) {
		timelib_time_offset *offset;

		offset = timelib_get_time_zone_info(tp.tv_sec, get_timezone_info(TSRMLS_C));
				
		array_init(return_value);
		add_assoc_long(return_value, "sec", tp.tv_sec);
		add_assoc_long(return_value, "usec", tp.tv_usec);

		add_assoc_long(return_value, "minuteswest", -offset->offset / SEC_IN_MIN);
		add_assoc_long(return_value, "dsttime", offset->is_dst);

		timelib_time_offset_dtor(offset);
	} else {
		char ret[100];

		snprintf(ret, 100, "%.8f %ld", tp.tv_usec / MICRO_IN_SEC, tp.tv_sec);
		RETURN_STRING(ret, 1);
	}
}

/* {{{ proto mixed microtime([bool get_as_float])
   Returns either a string or a float containing the current time in seconds and microseconds */
PHP_FUNCTION(microtime)
{
	_php_gettimeofday(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
/* }}} */

/* {{{ proto array gettimeofday([bool get_as_float])
   Returns the current time as array */
PHP_FUNCTION(gettimeofday)
{
	_php_gettimeofday(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
}
#endif
/* }}} */

#ifdef HAVE_GETRUSAGE
/* {{{ proto array getrusage([int who])
   Returns an array of usage statistics */
PHP_FUNCTION(getrusage)
{
	struct rusage usg;
	long pwho = 0;
	int who = RUSAGE_SELF;

	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &pwho) != FAILURE && pwho == 1) {
		who = RUSAGE_CHILDREN;
	}

	memset(&usg, 0, sizeof(struct rusage));

	if (getrusage(who, &usg) == -1) {
		RETURN_FALSE;
	}

	array_init(return_value);
#define PHP_RUSAGE_PARA(a) \
		add_assoc_long(return_value, #a, usg.a)
#if !defined( _OSD_POSIX) && !defined(__BEOS__) /* BS2000 has only a few fields in the rusage struct */
	PHP_RUSAGE_PARA(ru_oublock);
	PHP_RUSAGE_PARA(ru_inblock);
	PHP_RUSAGE_PARA(ru_msgsnd);
	PHP_RUSAGE_PARA(ru_msgrcv);
	PHP_RUSAGE_PARA(ru_maxrss);
	PHP_RUSAGE_PARA(ru_ixrss);
	PHP_RUSAGE_PARA(ru_idrss);
	PHP_RUSAGE_PARA(ru_minflt);
	PHP_RUSAGE_PARA(ru_majflt);
	PHP_RUSAGE_PARA(ru_nsignals);
	PHP_RUSAGE_PARA(ru_nvcsw);
	PHP_RUSAGE_PARA(ru_nivcsw);
	PHP_RUSAGE_PARA(ru_nswap);
#endif /*_OSD_POSIX*/
	PHP_RUSAGE_PARA(ru_utime.tv_usec);
	PHP_RUSAGE_PARA(ru_utime.tv_sec);
	PHP_RUSAGE_PARA(ru_stime.tv_usec);
	PHP_RUSAGE_PARA(ru_stime.tv_sec);
#undef PHP_RUSAGE_PARA
}
#endif /* HAVE_GETRUSAGE */

/* }}} */

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: sw=4 ts=4 fdm=marker
 * vim<600: sw=4 ts=4
 */
GetTickTime не используется.

-------
Ehhh.. what's up, doc?..


Отправлено: 10:15, 24-09-2007 | #14


Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


Цитата Coutty:
Что есть байт? Физической сущности у него нет. »
Почему это? В ту эпоху больших машин, основной системой счисления была восьмеричная.
Байт был синонимом октета, и одновременно равнялся ходовому машинному слову.

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

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий


Отправлено: 11:18, 24-09-2007 | #15



Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » [решено] Откуда берутся микросекунды?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Откуда и зачем взялась папка C:\symbols? truvo Хочу все знать 2 01-03-2009 21:24
[решено] Откуда глюк? Mr.Rome Непонятные проблемы с Железом 1 31-05-2008 13:37
[решено] Откуда берутся rootkit-процессы вида sp??.sys ShaRP Лечение систем от вредоносных программ 1 12-05-2008 16:39
емейлы и домены. От куда они берутся? united Хочу все знать 12 01-09-2006 13:47
Откуда берутся эти файлы? Klm Хочу все знать 8 26-02-2004 07:48




 
Переход