Пример кода:
#include <stdio.h>
#include <unistd.h>
#include <sched.h>
#include <pthread.h>
int
main (int argc, char **argv)
{
unsigned char buffer[128];
char buf[0x4000];
setvbuf (stdout, buf, _IOFBF, 0x4000);
fork ();
fork ();
pthread_t this_thread = pthread_self ();
struct sched_param params;
params.sched_priority = sched_get_priority_max (SCHED_RR);
pthread_setschedparam (this_thread, SCHED_RR, ¶ms);
while (1)
{
fwrite (&buffer, 128, 1, stdout);
}
}
Эта программа открывает 4 потока и выводит на стандартный вывод содержимое "буфера", который составляет 128 байтов или 16 длинных целых на 64-битном процессоре.
Если я запусту:
. / Writetest | pv -ptebaSs 800G> / dev / null
Я получаю скорость около 7,5 ГБ / с.
Кстати, это та же скорость, которую я получаю, если сделаю:
$ mkfifo out
$ dd if=/dev/zero bs=16384 >out &
$ dd if=/dev/zero bs=16384 >out &
$ dd if=/dev/zero bs=16384 >out &
$ dd if=/dev/zero bs=16384 >out &
pv <out -ptebaSs 800G >/dev/null
Есть ли способ сделать это быстрее?
Заметка.
буфер в реальной программе не заполнен нулями.
Мне интересно понять, сколько данных может выдать одна программа (многопоточная или многопроцессорная)
Похоже, 4 человека не поняли этот простой вопрос.
Я даже выделил жирным шрифтом причину вопроса.