curl
в командной строке отображается ход выполнения примерно так:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
8 1000M 8 85.2M 0 0 57k 0 1:06:13 0:05:38 1:00:35 47k
Скорость, отображаемая в этом примере, составляет 47k
. Но что это значит? Это:
- 47КиБ, то есть 47 * 1024 байт
- 47КБ, то есть 47 * 1000 байт
- 47kb, то есть 47 * 1000 бит (биты часто используются для измерения скорости)
И это:
- в секунду
- или в минуту?
решение1
Какие единицы измерения использует curl для измерения пропускной способности?
Согласноисходный кодэто KiB per second
.
Здесь вы можете увидеть определение использования 1024
и не использования1000
/* The point of this function would be to return a string of the input data,
but never longer than 5 columns (+ one zero byte).
Add suffix k, M, G when suitable... */
static char *max5data(curl_off_t bytes, char *max5)
{
#define ONE_KILOBYTE CURL_OFF_T_C(1024)
#define ONE_MEGABYTE (CURL_OFF_T_C(1024) * ONE_KILOBYTE)
#define ONE_GIGABYTE (CURL_OFF_T_C(1024) * ONE_MEGABYTE)
#define ONE_TERABYTE (CURL_OFF_T_C(1024) * ONE_GIGABYTE)
#define ONE_PETABYTE (CURL_OFF_T_C(1024) * ONE_TERABYTE)
...
}
Здесь вы можете видеть, что расчет выполняется в мс, а затем делится на 1000
для получения секунд.
/* Calculate the average speed the last 'span_ms' milliseconds */
{
curl_off_t amount = data->progress.speeder[nowindex]-
data->progress.speeder[checkindex];
if(amount > CURL_OFF_T_C(4294967) /* 0xffffffff/1000 */)
/* the 'amount' value is bigger than would fit in 32 bits if
multiplied with 1000, so we use the double math for this */
data->progress.current_speed = (curl_off_t)
((double)amount/((double)span_ms/1000.0));
else
/* the 'amount' value is small enough to fit within 32 bits even
when multiplied with 1000 */
data->progress.current_speed = amount*CURL_OFF_T_C(1000)/span_ms;
}