無畏併發 併發 Concurrent:程式的不同部分之間獨立的執行(併發) Parallel:程式的不同部分同時運行(並行) Rust無畏併發:允許你編寫沒有細微Bug的代碼,併在不引入新Bug的情況下易於重構 註意:本文中的”併發“泛指 concurrent 和 parallel 一、使用線程同時 ...
無畏併發
併發
- Concurrent:程式的不同部分之間獨立的執行(併發)
- Parallel:程式的不同部分同時運行(並行)
- Rust無畏併發:允許你編寫沒有細微Bug的代碼,併在不引入新Bug的情況下易於重構
- 註意:本文中的”併發“泛指 concurrent 和 parallel
一、使用線程同時運行代碼(多線程)
進程與線程
- 在大部分OS里,代碼運行在進程(process)中,OS同時管理多個進程。
- 在你的程式里,各獨立部分可以同時運行,運行這些獨立部分的就是線程(thread)
- 多線程運行:
- 提升性能表現
- 增加複雜性:無法保障各線程的執行順序
多線程可導致的問題
- 競爭狀態,線程以不一致的順序訪問數據或資源
- 死鎖,兩個線程彼此等待對方使用完所持有的資源,線程無法繼續
- 只在某些情況下發生的 Bug,很難可靠地複製現象和修複
實現線程的方式
- 通過調用OS的API來創建線程:1:1模型
- 需要較小的運行時
- 語言自己實現的線程(綠色線程):M:N模型
- 需要更大的運行時
- Rust:需要權衡運行時的支持
- Rust標準庫僅提供1:1模型的線程
通過 spawn 創建新線程
- 通過 thread::spawn 函數可以創建新線程:
- 參數:一個閉包(在新線程里運行的代碼)
➜ cd rust
~/rust
➜ cargo new thread_demo
Created binary (application) `thread_demo` package
~/rust
➜ cd thread_demo
thread_demo on master [?] via