Rust in Action Notas Capítulo 10 Procesos, subprocesos y contenedores

  1. 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;
  2. 通过thread::spawn(|| {})产生的线程,括号内的参数实际上就是一个闭包,因为创建新的线程不需要参数,因此就是两个竖线跟着一个花括号里面要做的事;如果闭包里面要用到外面的变量,就必须在前面加上move关键字,把外面的变量“捕获”(capture)到闭包内部,为什么要move到闭包内部,因为闭包的逻辑由新产生的线程来完成,他可能比外面的线程活得久(outlive),而Rust总是要求访问的数据是有效的,因此要把外部的变量的所有权移动(move)到闭包内部,如果不想使用move,可以有两个方案,一个是为需要move的变量实现Copy特征,另一个是把要移动的变量设置为Static
  3. 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, pero while 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);
  4. El cierre es en realidad una estructura anónima, que implementa std::ops::FnOncela función y puede implementar std::ops::Fno std::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;
  5. 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 accede T, el otro es Channelscrear un remitente Sendery un receptor Receiver;
  6. ChannelEs 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;
  7. Hilo verde为是协程Figura 10.58. 10.5节分别从小到大讲了几个计算机处理任务的单元,从线程、进程、WebAssembly、容器(container)、操作系统,值得注意的是,WASM比进程更大一级,在web这个运行时里,每一个WASM模块里的程序都是隔离的(体现在内存隔离、任务不相干扰),这一点跟进程类似,但WASM又运行在浏览器上,进程K8s中的pod概念,进程共享一个文件系统(sistema de archivos),而Containers自带文件系统;

Supongo que te gusta

Origin blog.csdn.net/Mint2yx4/article/details/131518784
Recomendado
Clasificación