比如说JAVA吧!JAVA是有多线程的。 既然有了多线程,为什么还需要队列这个东西呢? 比如发邮件吧! 直接新开一个线程发邮件不就行了。为什么要放到(异步)队列里面呢?
執行緒有瓶頸,佇列可以先屯著慢慢處理。
簡單舉個例子,這時候你有一批任務,但特點如下: 1. 執行時間長 2. 不關心執行結果
如果來一大批諸如此類的任務,你如果選擇多執行緒(也就是一個任務開啟一條執行緒)。那麼CPU最後會因為執行緒數目過多,而「忙死」於上下文切換裡。 由於不關心執行結果,你就可以把任務全部放進隊列裡,用一個線程池去執行,比如同一時間只執行4個任務,那麼你的全局就只有4條線程,上下文切換快,任務也有序地執行完。只是某種程度上效率可能不如多執行緒的快。
這種不同可以參考下tomcat 或apache httpd與 nginx或node的不同。
為了緩衝,比如你提交的請求並不是平穩的時候,可以通過隊列有一個緩衝,這樣數據可以被先積壓到隊列中
多執行緒與佇列不是一回事 多線程是不穩定的。
線程
需要考慮記憶體安全的問題, 調度等諸多問題, 相對來說更不可控.
隊列
執行頻度, 次序都是在可控範圍內的, 太適合作緩衝區了~
等你需要在記憶體裡放幾十個g的資料的時候,你就知道了
你學作業系統的時候,是不是學了一個生產者消費者模式,生產者產生產品放入隊列,消費者從隊列中讀取資料進行消費。為啥把生產和消費這兩個動作放到兩個執行緒呢?明白這個道理,就明白為啥用隊列了。
執行緒有瓶頸,佇列可以先屯著慢慢處理。
簡單舉個例子,這時候你有一批任務,但特點如下:
1. 執行時間長
2. 不關心執行結果
如果來一大批諸如此類的任務,你如果選擇多執行緒(也就是一個任務開啟一條執行緒)。那麼CPU最後會因為執行緒數目過多,而「忙死」於上下文切換裡。
由於不關心執行結果,你就可以把任務全部放進隊列裡,用一個線程池去執行,比如同一時間只執行4個任務,那麼你的全局就只有4條線程,上下文切換快,任務也有序地執行完。只是某種程度上效率可能不如多執行緒的快。
這種不同可以參考下tomcat 或apache httpd與 nginx或node的不同。
為了緩衝,比如你提交的請求並不是平穩的時候,可以通過隊列有一個緩衝,這樣數據可以被先積壓到隊列中
多執行緒與佇列不是一回事
多線程是不穩定的。
需要考慮記憶體安全的問題, 調度等諸多問題, 相對來說更不可控.
執行頻度, 次序都是在可控範圍內的, 太適合作緩衝區了~
等你需要在記憶體裡放幾十個g的資料的時候,你就知道了
你學作業系統的時候,是不是學了一個生產者消費者模式,生產者產生產品放入隊列,消費者從隊列中讀取資料進行消費。為啥把生產和消費這兩個動作放到兩個執行緒呢?明白這個道理,就明白為啥用隊列了。