首页 技术教程 实用代码 注册破解 正则表达式 网址导航 电子书籍

在PHP中使用curl_multi_exec多线程并发抓取数据

使用curl_multi_exec并发请求外部接口 有时候在一个PHP方法中要多次调用外部的接口,为了优化代码,提高效率,我们不妨使用curl_multi_exec并发处理多个请求,这样可以明显地提高获取响应数据的速度,减少程序执行的时间,下面是一个实际运行的例子。 <?php /** * 使用curl并行发送多个请求获取数据 * @param array $urls 多个请求数组 * @return array */ function sendMultiRequest(array $urls) { $conn = []; $res = []; //创建批处理curl句柄 $mh = curl_multi_init(); foreach ($urls as $k => $item) { $conn[$k] = curl_init(); //初始化各个子连接 //...
类别:网页编程 - PHP技术    查看:75    更新:2024-08-05

JS实现多线程 解决定时器不可靠/不准确

定时器为什么不可靠 在事件循环执行机制中,异步事件会把回调函数放入消息队列中,主线程的宏任务执行完毕后,依次执行消息队列中的微任务,等微任务执行完了再循环回来执行宏任务。由于消息队列中存在大量的任务,其他任务的执行时间就会造成定时器回调函数的延迟,如果不处理,就会一直叠加延迟,当运行时间久了之后,相差就会很大。 因此定时器是不能完全保证的。 怎么解决? web Worker 浏览器中 JS 都是单线程工作,当在前端执行一些耗时的工作时,页面后续渲染等步骤都会等待,就会导致一些页面的卡顿假死,影响用户体验。 webworker 的出现,就是给js创建多线程的环境。主线程创建worker线程,可以把计算密集型或高延迟的任务交...
类别:网页编程 - JavaScript    查看:158    更新:2023-07-15

SERVLET及JSP中的多线程同步问题

 Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的同步问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程同步的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题,对于这类随机性的问题调试难度也很大。   一、在Servlet/JSP中的几种变量类型   在编写Servlet/JSP程序时,对实例变量一定要小心使用。因为实例变量是非线程安全的。在Servlet/JSP中,变量可以归为下面的几类:   1. 类变量   request,re...
类别:网页编程 - JSP技术    查看:133    更新:2014-06-23

SERVLET及JSP中的多线程同步问题

 Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的同步问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程同步的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题,对于这类随机性的问题调试难度也很大。   一、在Servlet/JSP中的几种变量类型   在编写Servlet/JSP程序时,对实例变量一定要小心使用。因为实例变量是非线程安全的。在Servlet/JSP中,变量可以归为下面的几类:   1. 类变量   request,re...
类别:网页编程 - JSP技术    查看:141    更新:2014-05-20

PHP中的(伪)多线程与多进程

已经因为没怎么需要,所以没有查这个的资料。最近有一个项目却是需要这样子的功能。      查看了PHP的手册和他人的例子,了解到基本的两种方法: (伪)多线程:借助外力      利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序。       引用:我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的. 也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础. 假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php&...
类别:网页编程 - PHP技术    查看:117    更新:2014-05-19

Java多线程设计模式:wait/notify机制

通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程downloadThread将该图片下载完毕。如果图片还没有下载完,displayThread可以暂停,当downloadThread完成了任务后,再通知displayThread“图片准备完毕,可以显示了”,这时,displayThread继续执行。以上逻辑简单的说就是:如果条件不满足,则等待。当条件满足时,等待该条件的线程将被唤醒。在Java中,这个机制的实现依赖于wait/notify。等待机制与锁机制是密切关联的。例如:synchronized(obj) {while(!condition) {obj.wait();}obj.doSomething();} 当线程A获得了obj锁后,发现条件condition不满足,...
类别:程序开发 - JAVA    查看:110    更新:2014-05-15

Java多线程之ThreadLocal

ThreadLocal的核心思想很简单:为每个独立的线程提供一个变量的副本。Java提供的synchronized关键字使用了“同步锁”的机制来阻止线程的竞争访问,即“以时间换空间”。: " 10pt; FONT-SIZE:> ThreadLocal则使用了“拷贝副本”的方式,人人有份,你用你的,我用我的,大家互不影响,是“以空间换时间”。每个线程修改变量时,实际上修改的是变量的副本,不怕影响到其它线程。为了加深对ThreadLocal的理解,下面我使用一个例子来演示ThreadLocal如何隔离线程间的变量访问和修改:【1】SerialNum类package example.thread.threadLocal;public class SerialNum { private st...
类别:程序开发 - JAVA    查看:120    更新:2014-05-15

Java多线程Socket操作猜数游戏样例

1 服务器端程序,接受连接并处理客户端的请求ServerApp.javapackage test; import java.io.*; import java.net.*; /** *//*** 服务器端程序* * @author luxuan310,修正赵学庆。* */public class ServerApp ...{static final int PORT = 9000; private ServerSocket serverSocket; private Socket socket; private BufferedReader netIn; private PrintWriter netOut; public ServerApp() throws IOException ...{serverSocket = new ServerSocket(PORT); System.out.println("server start"); while (true) ...{// 等待连接socket = serverSocket.accept(); ServerThread st = new ServerThread(...
类别:程序开发 - JAVA    查看:117    更新:2014-05-15

编写多线程Java应用程序常见问题

几乎所有使用 AWT 或 Swing 编写的画图程序都需要多线程。但多线程程序会造成许多困难,刚开始编程的开发者常常会发现他们被一些问题所折磨,例如不正确的程序行为或死锁。 在本文中,我们将探讨使用多线程时遇到的问题,并提出那些常见陷阱的解决方案。 线程是什么?一个程序或进程能够包含多个线程,这些线程可以根据程序的代码执行相应的指令。多线程看上去似乎在并行执行它们各自的工作,就像在一台计算机上运行着多个处理机一样。在多处理机计算机上实现多线程时,它们确实可以并行工作。和进程不同的是,线程共享地址空间。也就是说,多个线程能够读写相同的变量或数据结构。 编写多线程程序时,你必须注意每个线程是否干扰了其他线程的...
类别:程序开发 - JAVA    查看:111    更新:2014-05-15

超线程多核心下Java多线程编程技术分析

在引入Java多线程技术后,几乎所有应用程序的开发在性能上都得到了很大的改进。本文将通过探讨超线程技术以及新出现的多核心Intel处理器技术来分析这些线程技术是怎样成为Java编程的一个标准部分的。  一、Java环境下的多线程技术  构建线程化的应用程序往往会对程序带来重要的性能影响。例如,请考虑这样一个程序,它从磁盘读取大量数据并且在把它们写到屏幕之前处理这些数据(例如一个DVD播放器)。在一个传统的单线程程序(今天所使用的大多数客户端程序)上,一次只有一个任务执行,每一个这些活动分别作为一个序列的不同阶段发生。只有在一块已定义大小的数据读取完成时才能进行数据处理。因此,能处理数据的程序逻辑直到磁盘读操作完...
类别:程序开发 - JAVA    查看:109    更新:2014-05-15

J2ME中多线程网络连接编程的分析介绍

摘 要 介绍并分析了J2ME的通用网络连接框架(GCF),并以此为基础,指出了在J2ME网络连接编程中存在的问题,并提出了通过构建多线程的两种解决方法。  关键词 J2ME GCF多线程 网络连接  引言    J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话、可视电话、数字机顶盒和汽车导航系统等等。即J2ME是为消费电子产品和手持设备量身定制的Java专用版本。J2ME的出现使开发跨平台的消费类电子产品的应用软件成为可能。Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用...
类别:程序开发 - JAVA    查看:106    更新:2014-05-14

Java多线程通信机制以及yield()和sleep()以及wait()的区别

从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列)。并且在某一时刻cpu只为ready queue中位于队列头部的线程服务。 但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield。 或者当前正在被服务的线程需要睡一会,醒来后继续被服务,这就是sleep。 sleep方法不推荐使用,可用wait。 线程退出最好自己实现,在运行状态中一直检验一个状态,如果这个状态为真,就一直运行,如果外界更改了这个状态变量,那么线程就停止运行。 sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态...
类别:程序开发 - JAVA    查看:100    更新:2014-05-14

Java 5.0多线程编程实践

Java5增加了新的类库并发集java.util.concurrent,该类库为并发程序提供了丰富的API多线程编程在Java 5中更加容易,灵活。本文通过一个网络服务器模型,来实践Java5的多线程编程,该模型中使用了Java5中的线程池,阻塞队列,可重入锁等,还实践了Callable, Future等接口,并使用了Java 5的另外一个新特性泛型。  简介   本文将实现一个网络服务器模型,一旦有客户端连接到该服务器,则启动一个新线程为该连接服务,服务内容为往客户端输送一些字符信息。一个典型的网络服务器模型如下:  1. 建立监听端口。  2. 发现有新连接,接受连接,启动线程,执行服务线程。 3. 服务完毕,关闭线程。  这个模型在大部分情况下运行良好...
类别:程序开发 - JAVA    查看:111    更新:2014-05-13

用PB编写多线程应用程序

  多线程是指一个程序内部同时执行的多个流程,与单线程相比,它至少有两个方面的优点:第一,它可以更好地利用系统资源,比如CPU,若一个线程因I/O操作受阻,另一个线程仍可利用CPU来执行;第二,它更好地满足了客户的需求,因为挑剔的客户希望你开发的程序在显示动画的同时还能播放音乐、显示文件、下载网络文件等,这是单线程应用程序无法完成的。目前,支持多线程的开发工具主要有:Java、VC、Delphi和C++Builder。   多线程强调的是一个进程内部有多个流程在同时执行,同时执行的概念相当于PB分布式计算中的异步处理。也就是说,只要我们在一个程序内部实现了异步处理,就相当于实现了多线程。分析至此,下一步该怎么...
类别:程序开发 - PowerBuilder    查看:90    更新:2014-05-10