RFC-0187:允許處理中的第一個執行緒以 zx_thread_start 開頭 | |
---|---|
狀態 | 已接受 |
區域 |
|
說明 | 程序中的第一個執行緒必須以 zx_process_start 啟動。這個 RFC 建議允許使用 zx_thread_start 啟動第一個執行緒。 |
變更 | |
作者 | |
審查人員 | |
提交日期 (年/月) | 2022-08-04 |
審查日期 (年/月) | 2022-09-31 |
摘要
這個 RFC 提議使用 zx_thread_start
啟動程序中的第一個執行緒,而不變更控點轉移的語意。
提振精神
目前處理中第一個執行緒必須使用 zx_process_start
啟動,而後續執行緒必須使用 zx_thread_start
來啟動。這些系統呼叫具有兩個差異:
zx_process_start
需要程序和執行緒的處理常式才能啟動,而zx_thread_start
只需要執行緒的控制代碼。zx_process_start
可讓呼叫端將帳號代碼轉移至已啟動的程序。
如果用戶端沒有使用 zx_thread_start
明確啟動執行緒 (例如使用標準執行緒程式庫),這項限制可能會強制執行重大解決方法。
就 Starnix 的情況為例,它會使用 Rust 的 std::thread
建立及啟動新執行緒。當 Starnix 在程序中建立第一個執行緒時,無法指示基礎程式庫「建立但不啟動」執行緒,也無法指示程式庫使用 zx_process_start
,而不是 zx_thread_start
。
與其強迫用戶端解決這類問題,根據這項 RFC 建議,允許用戶端針對程序生命週期中的所有執行緒使用 zx_thread_start
。
請注意,這麼做不需要變更程序之間轉移程序的語意。zx_process_start
仍然是將控制代碼轉移到新程序的唯一方法。
相關人員
誰擔心是否接受這個 RFC?(本節為選填,但建議填寫)。
講師:davemoore@google.com
審查者:
- abarth@google.com
- cpu@google.com
- mcgrathr@google.com
- travisg@google.com
顧問:
社群媒體化:
過去一年內,許多核心團隊成員都曾與核心團隊成員談到這項變更。
設計
這個 RFC 不需要變更介面;只會變更在程序中第一個執行緒呼叫 zx_thread_start
的語意。
實作
這項變更可讓 zx_thread_start(thread, thread_entry, stack, arg1, arg2)
在程序中啟動任何執行緒。呼叫 zx_thread_start
等同於呼叫 zx_process_start(process, thread, entry, stack, ZX_HANDLE_INVALID, arg2)
。
唯一的差異是 zx_thread_start
不需要明確的程序控點,並且允許呼叫端設定 arg1
(保留給 zx_process_start
中的 ZX_HANDLE_INVALID
)。
這項作業只需一次變更即可,詳情請參閱這篇文章。
效能
系統會在變更時執行標準的核心基準。
人體工學
這項變更可讓用戶端在程序中建立所有執行緒時,使用標準執行緒程式庫,為用戶端改善人體工學。
安全性考量
程序之間的帳號轉移會維持不變,而且在程序啟動的第一個執行緒後呼叫 zx_process_start
會導致錯誤。
說明文件
將更新 zx_process_start
和 zx_thread_start
的說明文件,以反映新的語意。