解决方案:php多线程抓取网页时遇到的问题,分享一下解决思路

优采云 发布时间: 2022-09-24 02:06

  解决方案:php多线程抓取网页时遇到的问题,分享一下解决思路

  php多线程抓取网页时遇到的一些问题,分享一下解决思路,通过对比一下线程工作原理和调用函数的优劣来分析php多线程抓取时的一些问题。一,线程工作原理线程是所有程序执行的基本单位,同时它又是最简单的程序。它所有的行为都在一个程序中(函数对象)完成,这一点,任何语言都是一样的,任何语言的线程就是对应os中的进程。

  

  os中的进程有点类似c/c++中的线程,线程在os中进行调度(比如调度到下一条命令或者wait),线程的执行是程序在执行的时候才开始,而进程是执行在os中,首先创建,最后销毁(可以向进程申请最大资源,进程结束自动销毁)。线程相对进程来说,是轻量级的。线程没有进程那么多的堆栈之类的,它没有进程那么多的状态变量。

  php线程代码如下:time_tthread_num=round(time()+1,n);thread_num=round(time()+1,n);php语言中,进程是windows中的count线程,拥有自己的地址空间,php线程在虚拟内存里。php从虚拟内存读取地址空间信息并返回给进程(也就是前面php中对thread_num的调用)。

  

  for(i=0;ipthread_state_default(0);pthread_init(el,0);pthread_start(el);pthread_release(el);}从虚拟内存中取得系统pthread_init地址,通过调用pthread_init函数启动线程。然后初始化pthread_state,pthread_state的state是一个系统线程池,线程可以直接调用pthread_state。

  pthread_state的初始化地址位于at_trx.at,即0x0000000。这里需要注意一点,pthread_state获取的是虚拟内存中的地址,使用的是内存所在存储路径,因此pthread_state对应系统线程的地址空间。因此在获取虚拟内存后调用pthread_init一次,调用线程就初始化好了。

  pthread_state初始化后,通过pthread_state和init函数启动线程(该函数一般传递变量。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线