- El cierre de Rust es similar a una expresión lambda.El formato general es que los parámetros
|a, b| {...}
en la línea vertical son los parámetros y la lógica de la función en las llaves; - 通过
thread::spawn(|| {})
产生的线程,括号内的参数实际上就是一个闭包,因为创建新的线程不需要参数,因此就是两个竖线跟着一个花括号里面要做的事;如果闭包里面要用到外面的变量,就必须在前面加上move
关键字,把外面的变量“捕获”(capture)到闭包内部,为什么要move
到闭包内部,因为闭包的逻辑由新产生的线程来完成,他可能比外面的线程活得久(outlive),而Rust总是要求访问的数据是有效的,因此要把外部的变量的所有权移动(move)到闭包内部,如果不想使用move,可以有两个方案,一个是为需要move的变量实现Copy
特征,另一个是把要移动的变量设置为Static
; - Cuando se generan múltiples subprocesos y el identificador se coloca en uno
Vec<thread::JoinHandle<()>>
, si desea unir todos los identificadores, el libro no recomienda usar el bucle for, perowhile let Some(handle) = handlers.pop() {}
porque el bucle for no permite la modificación de las variables atravesadas, pero while puede (de hecho, el bucle for también se puede modificar ahora); - El cierre es en realidad una estructura anónima, que implementa
std::ops::FnOnce
la función y puede implementarstd::ops::Fn
ostd::ops::FnMut
; la función (función) es en realidad un puntero de función (puntero de función), y el puntero de función apunta al código (código) en lugar de a los datos (datos). En este escenario, el código (código) se marca como ejecutable (ejecutable). En algunos casos complejos, el cierre sin capturar parámetros también es un puntero de función; - El método más comúnmente utilizado de acceso multiproceso a la misma variable es
Arc<Mutex<T>>
envolver los datos a los que se accedeT
, el otro esChannels
crear un remitenteSender
y un receptorReceiver
; Channel
Es una transmisión unidireccional. Si se requiere transmisión bidireccional (dúplex), la sugerencia en el libro es crear dos canales, cada canal corresponde a una dirección, y el canal se puede usar para implementar una cola de tareas (tarea cola). Consulte la página 358 para obtener más detalles;- Hilo verde为是协程8. 10.5节分别从小到大讲了几个计算机处理任务的单元,从线程、进程、WebAssembly、容器(container)、操作系统,值得注意的是,WASM比进程更大一级,在web这个运行时里,每一个WASM模块里的程序都是隔离的(体现在内存隔离、任务不相干扰),这一点跟进程类似,但WASM又运行在浏览器上,进程K8s中的pod概念,进程共享一个文件系统(sistema de archivos),而Containers自带文件系统;
Rust in Action Notas Capítulo 10 Procesos, subprocesos y contenedores
Supongo que te gusta
Origin blog.csdn.net/Mint2yx4/article/details/131518784
Recomendado
Clasificación