我正在閱讀和學習ThreadScheduler
以及任務周圍的文章,並且遇到了有關自己的ThreadSchedulers的MSDN examples之一中使用的函數ThreadPool.UnsafeQueueUserWorkItem
。在MSDN description about UnsafeQueueUserWorkItem有一個很大的警告,該功能可能是一個安全漏洞,並且它「不傳播調用堆棧」。UnsafeQueueUserWorkItem和「傳播調用堆棧」的意思是什麼?
唯一的鏈接是QueueUserWorkItem
哪個 - 從名字 - 似乎是「安全對手」?但沒有提及任何有關調用堆棧的內容。
傳播堆棧究竟意味着什麼?工作開始前複製它?爲什麼另一個線程仍然需要調用線程的堆棧?我會假設他們從一個新的空棧開始。畢竟,當線程函數返回時,它不會繼續執行調度Task的函數,對吧?
啊,我明白了。很有意思。現在......當不在任何安全環境下運行時,它是否會有性能差異? – Imi
不是它的工作方式,CAS檢查總是執行。堆棧走線具有取決於堆棧深度的固定成本。 「成本」是一個大詞,我們在這裏討論的是幾微秒。這完全沒有關係,直到您每秒運行數千* TP線程請求爲止。 –
_we're在這裏談論少量微秒_哇..感謝評論。然後我更好地描述我的自定義線程調度程序原型。我明確地說,不能在「微秒」的範圍內生活。 – Imi