Według mojego doświadczenia, pliku: odczyt/2 sam będzie bardzo powolny jeśli nazywany często z małymi ilościami danych, pomimo read_ahead
i raw
. Na dodatek musisz zaimplementować bufor binarny. Jeśli chodzi o przetwarzanie blokowe, to zgadzam się.
Mówię o czasach działania kilku godzin (z plikiem : odczyt/2) w porównaniu z 2 minutami (z buforowaniem zaimplementowanym w czystym Erlangu).
Oto moje pomiary przeczytaniu kilku 10 bajtów na raz:
%% Bufsize vs. runtime [ns]
%% 50 169369703
%% 100 118288832
%% 1000 70187233
%% 10000 64615506
%% 100000 65087411
%% 1000000 64747497
W tym przykładzie wydajność naprawdę nie zwiększać ponad 10 KB rozmiar bufora, ponieważ względna napowietrznych dla pliku: czytaj staje się wystarczająco mały.
Być może muszę wymyślić coś, co zapewnia wyższą wydajność produkcji, ale działa to bardzo dobrze w przypadku prototypowania. – Erlang
Czy zmierzyłeś lub zgadłeś? Jestem bardzo zadowolony z 'file: read/2' przy otwartym pliku przy użyciu' [raw, binary, read_ahead] 'i przy użyciu przetwarzania zorientowanego na blok. Jakiej wydajności oczekujesz? –