簡體   English   中英

虛擬線程如何映射到實際線程

[英]How Virtual Threads are mapped to Actual thread

如前所述,虛擬線程最終會映射到實際線程。 假設創建了 100 萬個虛擬線程。 在 8 核處理器中,我假設將有 8 個 kernel 線程。 所以,我的問題是

  1. 100 萬個虛擬線程如何映射到 8 個 kernel 線程? 這背后的算法是什么?
  2. 為什么阻塞在虛擬線程中很便宜? 據我了解,這是因為它不會阻塞運營商(內核)線程。 但是 kernel 線程使用上下文切換,為什么它仍然便宜?
  3. 虛擬線程是否適合代碼需要調用本機方法的用例(public native String getSystemTime();)
  1. 虛擬線程和 kernel 線程的映射由線程 model 完成。 有 3 種螺紋型號可供選擇

    1. 多對一

在此處輸入圖像描述

  1. 一對一

在此處輸入圖像描述

  1. 多對多

在此處輸入圖像描述

本質上,線程庫保持用戶線程/虛擬線程到 kernel 線程之間的映射。

  1. 用戶線程的阻塞很容易,因為所有kernel線程需要做的就是將用戶線程的state保存在kernel線程或進程本身中,然后拾取其他用戶線程。 另一方面,如果 kernel 線程需要進行上下文切換,則需要驅逐大量寄存器並將其存儲在 memory 中。 這個過程很昂貴。

此外,創建 kernel 線程需要創建完整的線程控制塊,以便 kernel 可以管理這些線程。 這個過程再次緩慢。

  1. 您始終在用戶線程級別工作。 因此,您進行的任何調用都需要在用戶線程本身上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM