比如说JAVA吧!JAVA是有多线程的。
既然有了多线程,为什么还需要队列这个东西呢?
比如发邮件吧!
直接新开一个线程发邮件不就行了。为什么要放到(异步)队列里面呢?
黄舟2017-04-17 12:00:11
簡單舉個例子,這時候你有一批任務,但特點如下:
1. 執行時間長
2. 不關心執行結果
如果來一大批諸如此類的任務,你如果選擇多執行緒(也就是一個任務開啟一條執行緒)。那麼CPU最後會因為執行緒數目過多,而「忙死」於上下文切換裡。
由於不關心執行結果,你就可以把任務全部放進隊列裡,用一個線程池去執行,比如同一時間只執行4個任務,那麼你的全局就只有4條線程,上下文切換快,任務也有序地執行完。只是某種程度上效率可能不如多執行緒的快。
這種不同可以參考下tomcat 或apache httpd與 nginx或node的不同。
高洛峰2017-04-17 12:00:11
你學作業系統的時候,是不是學了一個生產者消費者模式,生產者產生產品放入隊列,消費者從隊列中讀取資料進行消費。為啥把生產和消費這兩個動作放到兩個執行緒呢?明白這個道理,就明白為啥用隊列了。