假設我有有個要求延遲極低的資料要處理。比如var r = MD5(str) 需要用最快的方式得到MD5的結果。
按照低級的方法。我在Task中用如下方式來實作。
while (true)
{
if (!string.IsNullOrWhiteSpace(str))
{
strr= MD5(str)
str= null;
}
Thread.Sleep(1);
}
但是首先這個方法感覺很不美觀。并且查詢得知。sleep在系統上的最低精度是15ms。并且回傳的資料也相對麻煩。要么做事件。要么也要類似while去等待讀取。。
想用Queue 嘗試實作類似功能。。不知道Queue能否相對美觀,快速的等待資料被填充。并且方便快速的回傳處理后的資料?
或者請教有沒有其他比較合適的方法?
uj5u.com熱心網友回復:
為什么是 sleep? 既然在追求高速度,那要 sleep 做什么?uj5u.com熱心網友回復:
這里的sleep是為了等待str變數的變化。。str變數變化了才去做下一步動作。意思是。一個Task需要一直在執行。然后其他task有計算md5需求時。讓這個Task來完成。。
uj5u.com熱心網友回復:
你的意思是 Task 中有一個回圈在等待外部資料的改變?這顯然是錯誤的uj5u.com熱心網友回復:
我知道這種做法不對。。但是我不知道有什么其他方法可以代替這種方式呢?首先task不能少。例子看上去可以省去這個task。但是實際上task不能少。。這個task的作用就是快速的吧md5結果回傳給呼叫者。
uj5u.com熱心網友回復:
所以我建議你停止這種無意義的折騰。前后幾個帖子2月都過去了,沒有意義。
該說的我們都說了,只最后勸一句。window不是單任務系統,他就只能在“就緒執行緒”里輪著執行,這是你逃不開的,你要不承認這個,非要搞所謂0等待執行緒,注定是個徒勞作業
非要如此我覺著你可以放棄c#,你可以使用C++和wdk做個驅動,why,因為驅動程式走內核,走中斷。
驅動程式在可以做到你所謂的0等待,并且可以把計算外置
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/282501.html
標籤:C#
下一篇:WebSocket握手時出錯
