stringtranslate.com

Токио (программное обеспечение)

Tokio — это библиотека программного обеспечения для языка программирования Rust . Он предоставляет среду выполнения и функции, которые позволяют использовать асинхронный ввод-вывод , обеспечивая параллелизм при выполнении задач. [2] [3] [4]

Tokio был выпущен в августе 2016 года для Rust, языка программирования общего назначения . Разработанная Карлом Лершем, Tokio начиналась как платформа сетевых приложений и поддерживает такие функции, как прослушивание сокетов и широковещательная рассылка , позволяя передавать сообщения между компьютерами.

История

Tokio началась в августе 2016 года Карлом Лершем как инфраструктура сетевых приложений для Rust, построенная на фьючерсах , позволяющая использовать сетевое промежуточное программное обеспечение и неблокирующую , или асинхронную, реализацию готовности реактора . Tokio был вдохновлен Finagle, системой асинхронного удаленного вызова процедур (RPC) на базе Scala , разработанной в Twitter для виртуальных машин Java (JVM), позволяющей распределенным системам взаимодействовать внутри JVM. Tokio использует крейт Rust нижнего уровня , который сам использует системные вызовы, такие как epoll ( Linux ), kqueue ( FreeBSD ) и API порта завершения ввода/вывода (IOCP) ( Windows ). [5] [6] [7] Название «Токио» происходит от слов « Токио » и «мио». [8] Предварительная версия Tokio была выпущена в январе 2017 года, [9] за ней последовала полная версия в декабре 2020 года. [10] [11] В 2017 году Tokio получила грант от фонда поддержки открытого исходного кода Mozilla . [12] В апреле 2021 года Tokio профинансировала своего первого платного участника, Элис Рил, за ее работу по разработке проекта и помощи его пользователям. [13] [14]mio

Хотя Rust поддерживает асинхронные функции начиная с версии 1.39, выпущенной в ноябре 2019 года, [15] он не предоставляет никаких средств для их выполнения, и для этой цели требуется внешняя среда выполнения. [16] Tokio предоставляет среду выполнения, использующую многопоточный планировщик с перехватом работы . [10] Фьючерсы в Rust оцениваются лениво , требуя вызова функций, .awaitпрежде чем они выполнят какую-либо работу. [17] При .awaitвызове среда выполнения Tokio может приостановить исходное будущее до завершения ввода-вывода и возобновить паузу другой задачи, готовой к дальнейшей обработке. [18]

В число пользователей Tokio входят команды разработчиков Discord и AWS Lambda . [10] Среда выполнения JavaScript и TypeScript Deno использует Tokio под капотом, в отличие от среды выполнения JavaScript Node.js , которая использует библиотеку libuv . [19]

Функции

Асинхронный код

Tokio позволяет использовать асинхронные функции в Rust посредством создания асинхронной среды выполнения. Это можно сделать с помощью #[tokio::main] макроса . [18]

Например:

#[tokio::main] async fn main () -> Result < () > { let url = "https://en.wikipedia.org/" ; let text = reqwest :: get ( url ). Ждите ? . текст (). Ждите ? ; распечататьлн! ( "{}" , текст ); Хорошо (()) }               

В этом примере reqwestконтейнер используется для запроса языка гипертекстовой разметки (HTML) для английской Википедии . Чтобы гарантировать, что запрос не будет обработан немедленно, Tokio помещает вызов функции в асинхронную среду выполнения, ожидая завершения запроса перед вызовом println().

Tokio также включает версию стандартной библиотеки Rust, предназначенную для асинхронного использования. Например, tokio::fs::read_to_end(), считывающий содержимое файла, является асинхронной версией std::fs::read_to_end(). [20] Кроме того, Tokio поддерживает io_uring , интерфейс системных вызовов асинхронного ввода-вывода Linux, в отдельном контейнере с именем tokio-uring. [10] [21]

Зеленая нить во время компиляции

Tokio также позволяет пользователям создавать задачи ( зеленые потоки ) с помощью tokio::spawn()функции. Зеленые потоки выполняются на уровне пользователя, обеспечивая параллелизм, когда собственные потоки не всегда доступны. [22] В предыдущих версиях Rust реализована зеленая многопоточность; эта функциональность была удалена в Rust 1.0. [23] В отличие от фьючерсов, задачам не нужно использовать .await, поскольку задача будет автоматически выполняться, когда поток доступен. [18]

Прослушивание сокетов

Tokio способна прослушивать сокеты с помощью неблокирующего подхода. [5] В частности, TcpListenerструктура привязывает прослушиватель сокета TCP к адресу и асинхронно выполняет функцию. [24]

Вещание

Tokio предоставляет тип широковещательного канала, позволяющий транслировать сообщения нескольким получателям. После отправки сообщения оно принимается такими получателями. Это обеспечивает связь в реальном времени и распределенные системы, среди других приложений. [25]

Рекомендации

  1. ^ «Выпуск 1.36.0» . 2 февраля 2024 г. Проверено 20 февраля 2024 г.
  2. ^ Чанда, Абхишек (2018). Сетевое программирование с помощью Rust: создавайте быстрые и отказоустойчивые сетевые серверы и клиенты, используя функции безопасности памяти и параллелизма Rust. Бирмингем: Packt Publishing. ISBN 978-1-78862-171-7. ОСЛК  1028194311.
  3. ^ Шарма, Рахул (2019). Освоение Rust: узнайте о безопасности памяти, системе типов, параллелизме и новых функциях версии Rust 2018. Веса Кайхлавирта (Второе изд.). Бирмингем, Великобритания. ISBN 978-1-78934-118-8. ОСЛК  1090681119.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  4. ^ Де Симоне, Серджио (6 января 2021 г.). «Rust Asynchronous Runtime Tokio достигает версии 1.0» . ИнфоQ . Проверено 21 ноября 2021 г.
  5. ↑ Аб Лерш, Карл (3 августа 2016 г.). «Анонс Токио» . Проверено 11 декабря 2022 г.
  6. ^ «Finagle: система RPC, не зависящая от протокола» . 19 августа 2011 года . Проверено 11 декабря 2022 г.
  7. ^ Гомес, Гийом; Буше, Антони (2018). Программирование на Rust на примере: войдите в мир Rust, создавая привлекательные, параллельные, реактивные и надежные приложения. Бирмингем: Packt Publishing. ISBN 9781788470308.
  8. Лерш, Карл (3 августа 2016 г.). «Мне понравилось посещать город Токио (Токио), и мне понравился суффикс «io» и то, как он сочетается с Мио. Я не знаю... придумать название сложно, поэтому я не тратил слишком много времени на размышления. это". Реддит . Проверено 11 декабря 2022 г.
  9. ^ Лерш, Карл; Крайтон, Алекс; Турон, Аарон. «Анонсируем Токио 0.1» . Проверено 11 декабря 2022 г.
  10. ^ abcd Крилль, Пол (08 января 2021 г.). «Среда выполнения Tokio Rust достигла статуса 1.0». Инфомир . Проверено 3 сентября 2021 г.
  11. ^ Лерш, Карл. «Анонс Токио 1.0» . Проверено 11 декабря 2022 г.
  12. ^ «Mozilla награждает 365 000 долларов проектам с открытым исходным кодом в рамках MOSS» . LWN.net . Проверено 21 ноября 2021 г.
  13. ^ "Приветствуем Элис Рил как первого платного участника Токио" . Токио . Проверено 28 ноября 2021 г.
  14. Аллен Вайма (12 ноября 2021 г.). «Экосистема Токио с Элис Рил». Rustacean Station (Подкаст) . Проверено 26 ноября 2021 г.
  15. ^ «Rust получает поддержку асинхронности/ожидания с нулевой стоимостью в Rust 1.39» . ИнфоQ . Проверено 28 ноября 2021 г.
  16. ^ «Асинхронная экосистема». Асинхронное программирование на Rust . Проверено 28 ноября 2021 г.
  17. ^ Мацакис, Нико (07.11.2019). «Асинхронное ожидание в стабильной версии Rust!». Ржавый блог . Проверено 28 ноября 2021 г.
  18. ^ abc "Привет, Токио". Токио . Проверено 28 ноября 2021 г.
  19. ^ Раппл Мораса, Флориан (2022). Современная фронтенд-разработка с помощью Node.js: справочник по современной веб-разработке на JavaScript в экосистеме Node.js. Бирмингем, Великобритания. ISBN 9781804617380.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  20. ^ «Ввод-вывод». Токио . Проверено 11 декабря 2022 г.
  21. ^ «Анонсируем tokio-uring: io-uring поддержку Tokio» . Токио . Проверено 28 ноября 2021 г.
  22. Синтес, Тони (13 апреля 2001 г.). «Четверо на века». Инфомир . Проверено 5 января 2023 г.
  23. ^ Лю, Шинг (2020). Практические проекты по ржавчине. Нью-Йорк. ISBN 9781484255995.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  24. ^ Эгия Мораса, Ибан (2018). Высокая производительность Rust: научитесь резко повысить производительность ваших приложений Rust. Бирмингем, Великобритания. ISBN 978-1-78847-823-6. ОСЛК  1033544275.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  25. ^ Бланди, Джим; Орендофф, Джейсон; Тиндалл, Леонара (2019). Программирование на Русте. Севастополь. ISBN 9781492052548.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )

Внешние ссылки