RADION NAZMIEV, slice::group_by_mut is a nightly-only experimental API. И там есть хитрость с нулем, который ломает последовательность, если не отфильтровать заранее.
У вас ведь в любом случае есть некоторый контракт по созданию экземпляров, бины, конструктор без параметров. ::new() идиоматично делать без параметров. Можно заимплементить trait Default.
Поток выполнения? Это ведь концепция операционной системы, не драйвера.
В общем виде блокирующее чтение происходит по следующему сценарию – системный вызов чтения из программы -> ядро общается с драйвером -> системный вызов завершается. Никаких процессов или подобного драйвер не создает, это задачи операционной системы.