作家
登录

PHP与Golang如何通信?

作者: 来源: 2017-05-29 14:39:02 阅读 我要评论

测试:

耗时:0.015秒,消费时光包含:

  • 过程cat读出文本
  • 经由过程管道将数据传入Golang
  • go处理数据,将结不雅返回到屏幕

经由过程比较测试,计算出各个流程占用的时光。下面提到的title.txt文件,包含100万行文本,每行文本是大年夜b2b平台取的商品标题

1: 整体流程耗时

  1. time cat title.txt | ./test > /dev/null 

耗时:14.819秒,消费时光包含:

  • 过程cat读出文本
  • 经由过程管道将数据传入Golang
  • Golang处理数据,将结不雅返回到屏幕

2:计算分词函数耗时。筹划:去除分词函数的调取,即:注释掉落Golang源代码中的调取分词那行的代码

  1. time cat title.txt | ./test > /dev/null 

耗时:1.817秒时光,消费时光包含:

  • 过程cat读出文本
  • 经由过程管道将数据传入Golang
  • Golang处理数据,将结不雅返回到屏幕

分词耗时 = (第一步耗时) - (以上敕令所耗时)

分词耗时 : 14.819 - 1.817 = 13.002秒

3:测试cat过程与Golang过程之间通信所占时光

  1. time cat title.txt > /dev/null 

好吧,也许你已经发明,我是标题档,这里重点要讲的并不只是PHP与Golang若何通信。而是在介绍一种办法: 经由过程双向管道让随便率性说话通信。(所有说话都邑实现管道相干内容)

管道通信耗时:(第二步耗时) - (第三步耗时)

管道通信耗时: 1.817 - 0.015 = 1.802秒

4:PHP与Golang通信的时光消费

编写简单的php文件:

  1. <?php 
  2.       $descriptorspec = array( 
  3.           0 => array("pipe""r"), 
  4.           1 => array("pipe""w"
  5.       ); 
  6.   
  7.       $handle = proc_open( 
  8.           '/webroot/go/src/test/test'
  9.           $descriptorspec, 
  10.           $pipes 
  11.       ); 
  12.   
  13.       $fp = fopen("title.txt""rb"); 
  14.   
  15.       while (!feof($fp)) { 
  16.           fwrite($pipes['0'], trim(fgets($fp))."\n"); 
  17.           echo fgets($pipes[1]); 
  18.       } 
  19.   
  20.       fclose($pipes['0']); 
  21.       fclose($pipes['1']); 
  22.       proc_close($handle); 

流程与膳绫擎根本一致,读出title.txt内容,经由过程双向管道传入Golang过程分词后,再返回给php (比膳绫擎的测试多一步:数据再经由过程管道返回)

  1. time php popen.php > /dev/null 

耗时:24.037秒,消费时光包含:

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)