java - pthreads是PHP多线程的东西。。我有一个奇葩的问题需要问和讨论
巴扎黑
巴扎黑 2017-04-17 11:58:11
0
7
849

比如说JAVA吧!JAVA是有多线程的。
既然有了多线程,为什么还需要队列这个东西呢?
比如发邮件吧!
直接新开一个线程发邮件不就行了。为什么要放到(异步)队列里面呢?

巴扎黑
巴扎黑

全部回覆(7)
小葫芦

執行緒有瓶頸,佇列可以先屯著慢慢處理。

黄舟

簡單舉個例子,這時候你有一批任務,但特點如下:
1. 執行時間長
2. 不關心執行結果

如果來一大批諸如此類的任務,你如果選擇多執行緒(也就是一個任務開啟一條執行緒)。那麼CPU最後會因為執行緒數目過多,而「忙死」於上下文切換裡。
由於不關心執行結果,你就可以把任務全部放進隊列裡,用一個線程池去執行,比如同一時間只執行4個任務,那麼你的全局就只有4條線程,上下文切換快,任務也有序地執行完。只是某種程度上效率可能不如多執行緒的快。

這種不同可以參考下tomcat 或apache httpd與 nginx或node的不同。

Ty80

為了緩衝,比如你提交的請求並不是平穩的時候,可以通過隊列有一個緩衝,這樣數據可以被先積壓到隊列中

迷茫

多執行緒與佇列不是一回事
多線程是不穩定的。

大家讲道理

線程

需要考慮記憶體安全的問題, 調度等諸多問題, 相對來說更不可控.

隊列

執行頻度, 次序都是在可控範圍內的, 太適合作緩衝區了~

伊谢尔伦

等你需要在記憶體裡放幾十個g的資料的時候,你就知道了

小葫芦

你學作業系統的時候,是不是學了一個生產者消費者模式,生產者產生產品放入隊列,消費者從隊列中讀取資料進行消費。為啥把生產和消費這兩個動作放到兩個執行緒呢?明白這個道理,就明白為啥用隊列了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板