Кстати, кто не знал binary:split/3 имеет квадратичную какую-то зависимость времени исполнения от размера данных. Я в шоке.
1> A = « «"this_is_email", 10» || _ <- lists:seq(1,100000)».
«"this_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis"...»
2> timer:tc(fun()-> binary:split(A, «10», [ global ]) end).
{89907,
[«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_emai"...»,«"this_is_"...»,«"this"...»,
«...»|...]}
3> B = iolist_to_binary([A,A,A,A,A]).
«"this_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis_is_email\nthis"...»
4> timer:tc(fun()-> binary:split(B, «10», [ global ]) end).
{1346013,
[«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_email"»,«"this_is_email"»,«"this_is_email"»,
«"this_is_emai"...»,«"this_is_"...»,«"this"...»,
«...»|...]}
5> 1346013 / 89907.
14.97117020921619
Erlang/OTP 18 [erts-7.3.1] [source-25741fd] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
что в 20 версии я не знаю.