Скажем, я собираюсь использовать 30 потоков (40 ядер процессора), чтобы 4K случайно прочитал один и тот же файл и немного вычислил.
Эти 30 потоков не имеют общих объектов, кроме fd
.
Сначала я хотел open
один раз перед запуском персонала потоков, а затем в каждом потоке pread
(я заранее знал последовательность смещений и размер последовательности 64, так что будет быть 64 pread
), pread
, pread
...
Но общий fd
кажется недостаточным, поскольку он будет использоваться в 30 потоках, поэтому большое время разблокировки блокировки на pread
(это операция атома c, поэтому в ее реализации будет блокировка-разблокировка).
Лучше ли open
в каждом потоке?