我正在阅读和学习ThreadScheduler
以及任务周围的文章,并且遇到了有关自己的ThreadSchedulers的MSDN examples之一中使用的函数ThreadPool.UnsafeQueueUserWorkItem
。在MSDN description about UnsafeQueueUserWorkItem有一个很大的警告,该功能可能是一个安全漏洞,并且它“不传播调用堆栈”。UnsafeQueueUserWorkItem和“传播调用堆栈”的意思是什么?
唯一的链接是QueueUserWorkItem
哪个 - 从名字 - 似乎是“安全对手”?但没有提及任何有关调用堆栈的内容。
传播堆栈究竟意味着什么?工作开始前复制它?为什么另一个线程仍然需要调用线程的堆栈?我会假设他们从一个新的空栈开始。毕竟,当线程函数返回时,它不会继续执行调度Task的函数,对吧?
啊,我明白了。很有意思。现在......当不在任何安全环境下运行时,它是否会有性能差异? – Imi
不是它的工作方式,CAS检查总是执行。堆栈走线具有取决于堆栈深度的固定成本。 “成本”是一个大词,我们在这里讨论的是几微秒。这完全没有关系,直到您每秒运行数千* TP线程请求为止。 –
_we're在这里谈论少量微秒_哇..感谢评论。然后我更好地描述我的自定义线程调度程序原型。我明确地说,不能在“微秒”的范围内生活。 – Imi