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

在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

Windows下线程同步的实现方法

多任务是一个操作系统可以同时运行多个程序的能力。基本上,操作系统使用一个硬件时钟为同时运行的每个进程分配“时间片”。如果时间片足够小,并且机器也没有由于太多的程序而超负荷,那么在用户看来,所有的这些程序似乎在同试运行着。 多线程是在一个程序内部实现多任务的能力。程序可以把它自己分隔为单独的执行“线程”,这些线程似乎也同时在运行[1]。[g1] 多线程的应用非常广泛,最常见的是在需要进行大量计算的程序中使用辅助线程完成计算工作,而用户界面线程响应用户的操作。 多线程中不同线程之间的通讯通常是使用共享数据对象来实现的,不管是使用全局变量还是线程过程函数的指针参数进行通讯,都可能引发访问冲突[2]。[g2]&nbs...
类别:网页编程 - ASP.NET    查看:157    更新:2014-05-20

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

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

命名你的线程和查看系统

虽然集成开发环境(IDE)可以为图形化应用程序提供很好的调试设置,但是它不允许你调试多线程的Java服务器程序。幸运的是,有几个工具可以做到,例如日志应用程序接口(API)和Java调试器。开发人员也可以获得系统的线程转储,它可以在任何时间显示出系统状态。为了得到系统线程转储,运行服务器程序并键入[Ctrl] []。这会输出所有正在执行的线程。例如:^Full thread dump:Thread-1" prio=5 tid=0x87fe0 nid=0x800013b8 waiting on monitor [0..0xbfffe9f8]"Thread-0" prio=5 tid=0xafde0 nid=0x72a00 runnable [0x173f000..0x173fb48]at java.net.PlainSocketImpl.socketAccept(Native Method)at java.net.Plain...
类别:程序开发 - JAVA    查看:140    更新:2014-05-16

Java程序开发中如何应用线程

Java平台从开始就被设计成为多线程环境。在你的主程序执行的时候,其它作业如碎片收集和事件处理则是在后台进行的。 本质上,你可以认为这些作业是线程。它们正好是系统管理线程,但是无论如何,它们是线程。线程使你能够定义相互独立的作业,彼此之间互不干扰。系统将交换这些作业进或出cpu,这样(从外部看来)它们好象是同时运行的。 在你需要在你的程序中处理多个作业时,你也可以使用多个进程。这些进程可以是你自己创建的,你也可以操纵系统线程。你进行这些多作业处理,要使用几个不同的类或接口:◆java.util.timer类 ◆javax.swing.timer类 ◆thread类 ◆runnable接口 对于简单的作业,通常需要重复的,你可以使用java.util.timer类告诉...
类别:程序开发 - JAVA    查看:97    更新:2014-05-15

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中的线程感想

1.进程和线程的区别通俗一点说,进程就是程序的一次执行,而线程可以理解为进程中的执行的一段程序片段。用一点文词说就是,每个进程都有独立的代码和数据空间(进程上下文);而线程可以看成是轻量级的进程。一般来讲(不使用特殊技术),同一进程所产生的线程共享同一块内存空间。同一进程中的两段代码是不可能同时执行的,除非引入线程。线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。线程占用的资源要少于进程所占用的资源。进程和线程都可以有优先级。在线程系统中进程也是一个线程。可以将进程理解为一个程序的第一个线程。多进程——在操作系统中,能同时运行多个任务(程序)。多线程——...
类别:程序开发 - JAVA    查看:83    更新: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

多核线程-volatile原理与技巧

为什么使用volatile比同步代价更低?同步的代价, 主要由其覆盖范围决定, 如果可以降低同步的覆盖范围, 则可以大幅提升程序性能. 而volatile的覆盖范围仅仅变量级别的. 因此它的同步代价很低.volatile原理是什么?volatile的语义, 其实是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我.(工作内存详见java内存模型)因此, 当多核或多线程在访问该变量时, 都将直接操作主存, 这从本质上, 做到了变量共享.volatile的有什么优势?1, 更大的程序吞吐量2, 更少的代码实现多线程3, 程序的伸缩性较好4, 比较好理解, 无需太高的学习成本volatile有什么劣势?1, 容易出问题2, 比较难设计volatile运算存在脏数据问题volatile仅仅能保证变量可见性, 无法保证...
类别:程序开发 - JAVA    查看:96    更新:2014-05-15

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

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

关于Java线程的深入探讨

  1.什么是线程   一般来说,我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其称为程序(Program)。所谓"线程"(Thread),是"进程"中某个单一顺序的控制流。新兴的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线程视为基本执行单位。线程也是Java中的相当重要的组成部分之一。   甚至最简单的Applet也是由多个线程来完成的。在Java中,任何一个Applet的paint()和update()方法都是由AWT(Abstract Window Toolkit)绘图与事件处理线程调用的,而Applet 主要的里程碑方法——init(),start(),stop()和destory() ——是由执行该Applet的应用调用...
类别:程序开发 - JAVA    查看:97    更新:2014-05-15