Токио (программное обеспечение)
Оригинальный автор(ы) | Карл Лерш |
---|---|
Первоначальный выпуск | 23 декабря 2020 г |
Стабильная версия | 1.39.2 [1]
|
Репозиторий | |
Написано в | Ржавчина |
Операционная система | macOS , Windows , Linux , FreeBSD , WebAssembly |
Тип | Асинхронная среда выполнения |
Лицензия | МОЯ лицензия |
Веб-сайт | такой |
Tokio — это библиотека программного обеспечения для языка программирования Rust . Он предоставляет среду выполнения и функции, которые позволяют использовать асинхронный ввод-вывод , обеспечивая параллелизм при выполнении задач. [2] [3] [4]
Tokio был выпущен в августе 2016 года для Rust, языка программирования общего назначения . Разработанная Карлом Лершем, Tokio начиналась как платформа сетевых приложений и поддерживает такие функции, как прослушивание сокетов и широковещательная передача , позволяя передавать сообщения между компьютерами.
История
[ редактировать ]Tokio началась в августе 2016 года Карлом Лершем как инфраструктура сетевых приложений для Rust, построенная на фьючерсах , позволяющая использовать сетевое промежуточное программное обеспечение и неблокирующую , или асинхронную, реализацию готовности реактора . Tokio был вдохновлен Finagle, (RPC) на базе Scala, системой асинхронного удаленного вызова процедур разработанной в Twitter для виртуальных машин Java (JVM), позволяющей распределенным системам взаимодействовать внутри JVM. Токио использует ящик Rust нижнего уровня. mio
, который сам использует системные вызовы, такие как epoll ( Linux ), kqueue ( FreeBSD ) и API порта завершения ввода/вывода (IOCP) ( Windows ). В Linux также можно использовать io_uring через tokio-uring . [5] [6] [7] Название «Токио» происходит от слов «Токио» и «мио». [8] Предварительная версия Tokio вышла в январе 2017 года. [9] за которым последует полный выпуск в декабре 2020 года. [10] [11] В 2017 году Tokio получила грант от фонда поддержки открытого исходного кода Mozilla . [12] В апреле 2021 года Tokio профинансировала своего первого платного участника, Элис Рил, за ее работу по разработке проекта и помощи его пользователям. [13] [14]
Хотя 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).await?.text().await?;
println!("{}", text);
Ok(())
}
В этом примере reqwest
crate используется для запроса языка гипертекстовой разметки (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]
Прослушивание сокетов
[ редактировать ]Tokio способна прослушивать сокеты с помощью неблокирующего подхода. [5] В частности, TcpListener
Структура привязывает прослушиватель сокета TCP к адресу и асинхронно выполняет функцию. [23]
Вещание
[ редактировать ]Tokio предоставляет тип широковещательного канала, позволяющий транслировать сообщения нескольким получателям. После отправки сообщения оно принимается такими получателями. Это обеспечивает связь в реальном времени и распределенные системы, среди других приложений. [24]
Ссылки
[ редактировать ]- ^ «Выпуск 1.39.2» . 27 июля 2024 г. Проверено 28 июля 2024 г.
- ^ Чанда, Абхишек (2018). Сетевое программирование с помощью Rust. Создавайте быстрые и отказоустойчивые сетевые серверы и клиенты, используя функции безопасности памяти и параллельного выполнения Rust . Бирмингем: Packt Publishing. ISBN 978-1-78862-171-7 . OCLC 1028194311 .
- ^ Шарма, Рахул (2019). Освоение Rust: узнайте о безопасности памяти, системе типов, параллелизме и новых функциях версии Rust 2018 . Веса Кайхлавирта (Второе изд.). Бирмингем, Великобритания. ISBN 978-1-78934-118-8 . OCLC 1090681119 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Де Симоне, Серджио (6 января 2021 г.). «Rust Asynchronous Runtime Tokio достигает версии 1.0» . ИнфоQ . Проверено 21 ноября 2021 г.
- ^ Jump up to: а б Лерш, Карл (3 августа 2016 г.). «Анонсируем Токио » Получено 11 . декабря
- ^ «Finagle: система RPC, не зависящая от протокола» . 19 августа 2011 года . Проверено 11 декабря 2022 г.
- ^ Гомес, Гийом; Буше, Антони (2018). Программирование на Rust на примере: войдите в мир Rust, создавая привлекательные, параллельные, реактивные и надежные приложения . Бирмингем: Packt Publishing. ISBN 9781788470308 .
- ^ Лерш, Карл (3 августа 2016 г.). «Мне понравилось посещать город Токио (Токио), и мне понравился суффикс «io» и то, как он сочетается с Мио. Я не знаю... придумать название сложно, поэтому я не стал тратить слишком много времени на размышления это" . Реддит . Проверено 11 декабря 2022 г.
- ^ Лерш, Карл; Крайтон, Алекс; Турон, Аарон. Анонсируя Токио « Получено 11 . декабря
- ^ Jump up to: а б с д Криль, Пол (08 января 2021 г.). «Среда выполнения Tokio Rust достигла статуса 1.0» . Инфомир . Проверено 3 сентября 2021 г.
- ^ Лерш, Карл. Анонсируя Токио « Получено 11 . декабря
- ^ «Mozilla выделяет 365 000 долларов США проектам с открытым исходным кодом в рамках MOSS» . LWN.net . Проверено 21 ноября 2021 г.
- ^ «Приветствуем Элис Рил как первого платного автора из Токио» . Токио . Проверено 28 ноября 2021 г.
- ^ Аллен Вайма (12 ноября 2021 г.). «Экосистема Токио с Элис Рил» . Rustacean Station (Подкаст) . Проверено 26 ноября 2021 г.
- ^ «Rust получает бесплатную поддержку Async/Await в Rust 1.39» . ИнфоQ . Проверено 28 ноября 2021 г.
- ^ «Асинхронная экосистема» . Асинхронное программирование на Rust . Проверено 28 ноября 2021 г.
- ^ Мацакис, Нико (07.11.2019). «Асинхронное ожидание в стабильной версии Rust!» . Ржавый блог . Проверено 28 ноября 2021 г.
- ^ Jump up to: а б «Привет, Токио» . Токио . Проверено 28 ноября 2021 г.
- ^ Раппл Мораса, Флориан (2022). Современная фронтенд-разработка с помощью Node.js: справочник по современной веб-разработке на JavaScript в экосистеме Node.js. Бирмингем, Великобритания. ISBN 9781804617380 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ «Ввод/вывод» . Токио . Проверено 11 декабря 2022 г.
- ^ «Анонсируем tokio-uring: io-uring поддержку Токио» . Токио . Проверено 28 ноября 2021 г.
- ^ Синтес, Тони (13 апреля 2001 г.). «Четверо на века» . Инфомир . Проверено 5 января 2023 г.
- ^ Эгия Мораса, Ибан (2018). Высокая производительность Rust: научитесь резко увеличивать производительность ваших приложений Rust . Бирмингем, Великобритания. ISBN 978-1-78847-823-6 . OCLC 1033544275 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Блэнди, Джим; Орендофф, Джейсон; Тиндалл, Леонара (2019). Программирование на Русте . Севастополь. ISBN 9781492052548 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка )
Внешние ссылки
[ редактировать ]- Официальный сайт
- Токио на GitHub
- Токио — это crates.io