Экспорт файловых операций ввода-вывода в отдельные потоки рекомендуется или может быть обязательным?

На данный момент я пишу тесты и думаю об экспорте всех файловых операций ввода-вывода в отдельные потоки в моем GUI-приложении, потому что я боюсь, что большой файл может заблокировать основной поток. Это было бы не удобно для пользователя.

Распространено ли экспортировать File-I/O-Operations в отдельные рабочие потоки?


person software knife    schedule 30.12.2015    source источник
comment
Да, я так думаю. Но не обязательно один к одному. то есть каждый ввод-вывод в своем собственном потоке.   -  person frogatto    schedule 31.12.2015


Ответы (1)


Ну, это зависит от обстоятельств, но в целом это очень хорошая идея. Если ваш основной поток — это ваш насос событий, то да; настоятельно рекомендуется выполнять длительные операции в отдельных потоках. В частности, если приложение использует медленное соединение GPRS/3G, вы обычно не хотите, чтобы приложение блокировалось при использовании сети. Операции с локальными файлами также иногда могут быть довольно медленными, в зависимости от того, насколько загружено устройство.

Модель Java Swing Worker является примером того, как это можно сделать модульным и потокобезопасным способом. Я предлагаю вам изучить его для вдохновения, поскольку он хорошо задокументирован. Опять же, я уверен, что в Android есть аналогичные возможности для выполнения кода вне основного потока.

Если вы пишете для него (модульные) тесты, я предлагаю создать шаблон, в котором вы можете внедрить свой рабочий код как часть теста и держать свой код ввода-вывода строго вне контекста основного потока. Таким образом, вы можете имитировать поведение приложения при медленном соединении, фактически вообще не используя сеть.

person Daniel    schedule 31.12.2015
comment
Спасибо за ответ и с новым годом. - person software knife; 31.12.2015
comment
Тебя тоже с Новым годом, дружище. - person Daniel; 31.12.2015