搜尋

首頁  >  問答  >  主體

java - pthreads是PHP多线程的东西。。我有一个奇葩的问题需要问和讨论

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

巴扎黑巴扎黑2804 天前840

全部回覆(7)我來回復

  • 高洛峰

    高洛峰2017-04-17 12:00:11

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

    回覆
    0
  • 黄舟

    黄舟2017-04-17 12:00:11

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

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

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 12:00:11

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

    回覆
    0
  • 迷茫

    迷茫2017-04-17 12:00:11

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 12:00:11

    線程

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

    隊列

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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 12:00:11

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

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 12:00:11

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

    回覆
    0
  • 取消回覆