电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

php中實現多線程

瀏覽:7日期:2024-02-05 08:48:07

PHP中實現多線程? 看到這個標題, 你一定以為我瘋了..但是事實上我真的這么做了.

下面是我的一些做法, 已經實驗過. 確實可以的.

我們知道PHP本身是不支持多線程的, 但是我們的WEB服務器是支持多線程的.

也就是說可以同時讓多人一起訪問. 這也是我在PHP中實現多線程的基礎.

假設我們現在運行的是a.php這個文件. 但是我在程序中又請求WEB服務器運行另一個b.php

那么這兩個文件將是同時執行的.

(PS: 一個鏈接請求發送之后, WEB服務器就會執行它, 而不管客戶端是否已經退出)

有些時候, 我們想運行的不是另一個文件, 而是本文件中的一部分代碼.該怎么辦呢?

其實可是通過參數來控制a.php來運行哪一段程序.

下面看一個例子:

//a.php

PHP代碼:--------------------------------------------------------------------------------

<?php function runThread() { $fp = fsockopen('localhost', 80, $errno, $errmsg); fputs($fp, 'GET /a.php?act=brnrn') //這里的第二個參數是HTTP協議中規定的請求頭 //不明白的請看RFC中的定義 fclose($fp); }

function a() { $fp = fopen('result_a.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . 'rn'); fclose($fp) }

function b() { $fp = fopen('result_b.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . 'rn'); fclose($fp) }

if(!isset($_GET['act'])) $_GET['act'] = 'a'; if($_GET['act'] == 'a') { runThread(); a(); } else if($_GET['act'] == 'b') b();?>

--------------------------------------------------------------------------------

打開result_a.log 和 result_b.log 比較一下兩個文件的中訪問的時間. 大家會發現, 這兩個的確是在不同線程中運行的.有些時間完全一樣.

上面只是一個簡單的例子, 大家可以改進成其它形式.

既然PHP中也能多線程了, 那么問題也來了, 那就是同步的問題. 我們知道 PHP本身是不支持多線程的. 所以更不會有什么像

Java 中synchronize的方法了. 那我們該如何做呢.

1. 盡量不訪問同一個資源. 以避免沖突. 但是可以同時像數據庫操作. 因為數據庫是支持并發操作的. 所以在多線程的PHP中

不要向同一個文件中寫入數據. 如果必須要寫的話, 用別的方法進行同步.. 如調用 flock對文件進行加鎖等. 或建立臨時文件

并在另外的線程中等待這個文件的消失 while(file_exits('xxx')); 這樣就等于這個臨時文件存在時, 表示其實線程正在操作

如果沒有了這個文件, 說明其它線程已經釋放了這個.

2. 盡量不要從runThread在執行fputs后取這個socket中讀取數據. 因為要實現多線程, 需要的用非阻塞模式. 即在像fgets這

樣的函數時立即返回.. 所以讀寫數據就會出問題. 如果使用阻塞模式的話, 程序就不算是多線程了. 他要等上面的返回才執行

下面的程序. 所以如果需要交換數據最后利用外面文件或數據中完成. 實在想要的話就用socket_set_nonblock($fp) 來實現.

說了這么多, 倒底這個有沒有實際的意義呢? 在什么時候需要這種用這種方法呢 ?

答案是肯定的. 大家知道. 在一個不斷讀取網絡資源的應用中, 網絡的速度是瓶頸. 如果采多這種形式就可以同時以多個線程對

不同的頁面進行讀取.

本人做的一個能從8848、soaso這些商城網站搜索信息的程序。還有一個從阿里巴巴網站上讀取商業信息和公司目錄的程序也用到

了此技術。 因為這兩個程序都是要不斷的鏈接它們的服務器讀取信息并保存到數據庫。 利用此技術正好消除了在等待響應時的瓶頸。

標簽: PHP
主站蜘蛛池模板: 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 制冷采购电子商务平台——制冷大市场 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 稳尚教育加盟-打造高考志愿填报平台_新高考志愿填报加盟_学业生涯规划加盟 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 万博士范文网-您身边的范文参考网站Vanbs.com | 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 磁力反应釜,高压釜,实验室反应釜,高温高压反应釜-威海自控反应釜有限公司 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 成都离婚律师|成都结婚律师|成都离婚财产分割律师|成都律师-成都离婚律师网 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 钢制暖气片散热器_天津钢制暖气片_卡麦罗散热器厂家 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 专业生产动态配料系统_饲料配料系统_化肥配料系统等配料系统-郑州鑫晟重工机械有限公司 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 外贸网站建设-外贸网站设计制作开发公司-外贸独立站建设【企术】 | DAIKIN电磁阀-意大利ATOS电磁阀-上海乾拓贸易有限公司 | 烟台游艇培训,威海游艇培训-烟台市邮轮游艇行业协会 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 灌装封尾机_胶水灌装机_软管灌装封尾机_无锡和博自动化机械制造有限公司 | 三效蒸发器_多效蒸发器价格_四效三效蒸发器厂家-青岛康景辉 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 真空吸污车_高压清洗车厂家-程力专用汽车股份有限公司官网 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 |