Читаем Rust на примерах полностью

// TODO: попробуйте удалить 'move' и посмотреть что получится

children.push(thread::spawn(move || -> u32 {

// Вычислим промежуточную сумму этого сегмента:

let result = data_segment

// итерируемся по символам этого сегмента..

.chars()

// .. преобразуем текстовые символы в их числовые значения..

.map(|c| c.to_digit(10).expect("должно быть числом"))

// .. и суммируем получившийся итератор из чисел

.sum();

// `println!` блокирует стандартный вывод, так что чередования текста не происходит

println!("обработан сегмент {}, result={}", i, result);

// "return" не обязателен, так как Rust "язык выражений" и

// последнее выполненное выращение в каждом блоке автоматически становится значением этого блока.

result

}));

}

/*************************************************************************

* Фаза "Reduce"

*

* Собираем наши промежуточные значения и объединяем их в конечные результат

************************************************************************/

// собираем промежуточный результат каждого потока в новый вектор

let mut intermediate_sums = vec![];

for child in children {

// собираем возвращаемое значение каждого дочернего потока

let intermediate_sum = child.join().unwrap();

intermediate_sums.push(intermediate_sum);

}

// Объединяем все промежуточные суммы в одну конечную сумму.

//

// Мы используем "turbofish" `::<>` чтобы подсказать `sum()` тип.

//

// TODO: попробуйте без turbofish, явно указывая тип final_result

let final_result = intermediate_sums.iter().sum::();

println!("Финальная сумма: {}", final_result);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Назначения"><strong><a l:href="#Назначения">Назначения</a></strong></p>

Не стоит позволять числу наших потоков быть зависимом от введённых пользователем данных. Что если пользователь решит вставить много пробелов? Мы действительно хотим создать 2000 потоков? Измените программу так, чтобы данные разбивались на ограниченное число блоков, объявленных статической константой в начале программы.

<p id="Смотрите_также_67"><strong><a l:href="#Смотрите_также_67">Смотрите также:</a></strong></p>

   • Потоки

   • вектора и итераторы

   • замыкания, семантика передачи владения и перемещения (move) в замыканиях

   • деструктуризация при присвоениях

   • нотация turbofish в помощь механизму вывода типов

   • unwrap или expect

   • перечисления

<p id="Каналы"><strong><a l:href="#Каналы">Каналы</a></strong></p>

Rust предоставляет асинхронные каналы (channel) для взаимодействия между потоками. Каналы обеспечивают однонаправленную передачу информации между двумя конечными точками: отправителем (Sender) и получателем (Receiver).

Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители

Все жанры