php如何 使用多線程?

來源:互聯網
上載者:User
關鍵字 php hadoop storm spark java
業務情境:從api介面擷取資料,插入到資料庫中,這個過程大概幾個小時,我想用多線程技術來改造,但不知如何下手。其他方式也行。

補充一句:對php未來方向不明,java有很多重量級東西,如hadoop,spark,storm等等,php何去何從?

回複內容:

其實,你這裡真是的需求,只是希望在Web這邊擷取一種方式,來執行一個長達數小時的“非同步”任務。就PHP而言,可以用2種方式來做:
(1)在PHP裡使用shell_exec的函數,以shell的方式,啟動一個獨立的PHP指令碼執行。這種方式,其實相當於在Web伺服器處理過程中,獨立起了一個shell進程處理你的任務。這裡,需要特別注意的是shell_exec的伺服器安全,注意校正參數,小心避免被帶入shell命令中。這個是比較容易實現的方式。
(2)使用PHP實現一個Server,監聽一個連接埠,為Web端提供服務。這裡的實現方式有很多,通常要配合擴充,例如原生的pthread(多線程),開源擴充swoole等等。

直接在web程式裡使用多線程,是不恰當的,web請求通常有時間限制,例如timeout預設是30秒。你如何保證,線上程任務執行完之前,它的父進程仍然在工作?swoole好了 Swoole: PHP的非同步、並行、分布式擴充 ,解決你的問題可以使用php的命令列模式運行,只不過這不是多線程,而是多進程。
更複雜的方式,可以使用gearman。小菜說一下見解。
這個情境並不一定用多線程來解決吧。用多進程較穩定。
然後業務情境中。插入到資料庫中。是哪種資料庫呢。不會是因為寫鎖的問題嗎?
PHP用進程或者線程或者非同步等等都是可以的。很多大牛寫的擴充可以協助你做到。至於業務情境下的效能得自己去測試了。
至於PHP的話,你可以多去瞭解別人所說的快和慢指的是什麼,7出來了的改進。同時PHP主要是web開發指令碼。比較的意義在哪裡要懂得。
還有大牛一般並不只會一種語言吧。或者說的是不拘泥於一種語言。
all in interesting.
說的不好的地方望巨巨們指點。
-------------------------------------
閱讀完最新答案,補充一句,其實我也想說‘非同步’解決就好。2333多進程一樣的可以做到這個效果。php 本身不支援多線程,不過有些擴充可以幫你做到多線程可以用擴充,php_pthreads,優點支援WIN和lin雙平台,缺點php必須運行線上程安全模式下,CGI方式運行就不要想了。Spark是Scala寫的花2天學習nodejs,然後用async庫,很方便實現你的需求,很多東西配合起來用,比較好
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.