Предположим, у нас отправитель шлёт данные по 20 байтов тысячу раз в секунду. При этом получатель тормоз и не всегда успевает с такой частотой принимать данные (но если бы они где-то буферизовались, то проблем бы не было).
У меня есть девайс, который на компьютере принимает ровнёхонько 20 000 байтов в секунду, вообще без видимых флюктуаций. А вот на смартфоне не успевает и выходит на процентов 10-20 меньше. Я в протоколах этих не разбираюсь и предполагал, что там как-то автоматически будет буферизоваться всё где-то (в разумных пределах), а я там уже буду вычитывать, к примеру 100 раз в секунду по 200 байтов за раз, ну или как получится.
Я посмотрел исходники драйвера на смартфоне и там запускается поток с высоким приоритетом, который просто в цикле читает данные и передаёт их дальше. То бишь если у этого потока цикл будет не такой быстрый (а ведь андроид это не ОС реального времени и совершенно нельзя гарантировать, что поток, даже с высоким приоритетом, будет висеть на процессоре без перерыва) и иногда будут перерывы, то пакеты будут теряться.
Как устроен драйвер на компьютере, я не знаю. Поэтому и хочу спросить - есть смысл копать дальше, или на компьютере где-то в ядре ровно такой же цикл и он работает стабильно просто потому, что компьютер быстрей смартфона? Но в теории и на компьютере при нагрузке могут пропадать пакеты и нигде они не будут буферизоваться?