Dart: асинхронность и многопоточностьHola, Amigos! На связи Антон Мартышков, Flutter-разработчик Amiga. Сегодня я расскажу о возможностях в языке Dart, которые мы используем для написания кроссплатформенных приложений на Flutter.Эта небольшая заметка о том как, работает асинхронность и как можно выполнить код в другом потоке (изоляте). Внутренние механизмы не раскрывались специально, так как тогда получится большая статья, а оно нам тут не надо. Для этого есть Habr. ПотокиЯзык Dart однопоточный и исполняет только одну инструкцию. Но есть изолят — это аналогия привычного нам потока, но есть одно отличие — изоляты не разделяют память. Изначально приложение работает только в одном изоляте. Но с ростом приложения вы заметите, как пользовательский интерфейс и анимации начнут притормаживать, так как отрисовка происходит в главном потоке. Значит где-то в коде выполняется длительная операция, которая блокирует отрисовку, пока операция не завершится. Для этого мы создадим новый изолят и поручим ему выполнять длительную операцию. Тогда наш главный поток сможет заниматься интерфейсом. Общаются изоляты через порты и не знают друг о друге ничего (поэтому и зовутся изолятами). Работаю эти порты со списками и коллекциями из примитивов. И конечно же не забывайте очищать память, удаляя изолят когда он уже не нужен, если не создавали его через метод compute().Асинхронность Асинхронность — концепция программирования, когда результат функции помеченной как async будет возвращен не сразу. Код следующий за вызовом этой функции может продолжать свою работу или ожидать ее завершения, если перед ней было специально слово await. Асинхронный метод выполнится синхронно, но тогда, когда некий внутренний механизм (Event Loop) возьмет его в работу, чтобы не навредить другим операциям.Подытожу: - используйте асинхронность для небольших задач — десятки миллисекунд, пример — поиск элемента в большом массиве.- используйте изоляты для задач в несколько сотен миллисекунд и более, пример — десериализация большого json в несколько тысяч строк.P.S. Подробнее об асинхронности и многопоточности можно почитать тут.