并发

探索PHP7(一)--性能

守給你的承諾、 提交于 2019-12-03 03:29:43
#探索PHP7(一)--性能# ##前言## 在2015年12月2号,鸟哥的在开源中国发布的新闻 写在 PHP 7 发布之际一些话 ,小编意识到从8月份发布第一个公测版到现在经过了将近4个月的等待PHP7正式版本终于发布了,所以果断装上了一个玩玩,确实和之前所说的一样提升很大,进过了几天的测试,所以写下这篇博文希望能和大家有一个共同的了解. 注:已经有很多新闻博客分享了关于PHP7的一些讯息,我希望通过一名普通程序员的角度来看待它对我们带来的价值. 附上: 鸟哥:写在 PHP 7 发布之际一些话: http://www.oschina.net/news/68607/php-7-laruence-feeling PHP官方地址: http://www.php.net/ ##1. 简单粗暴的测试## 那么问题来了PHP7发布的最大的亮点是什么? 无疑是它带了了相当可观的性能提升,我们先从几个长使用的框架下手看看5.6和7之间的差距有多少,然后我们在通过具体的测试来对不同的操作具体产生了多大的影响 配置信息:服务器为:2核心2G(Centos6.5),LoadRunner压力机为4核4G,ab压力机为2核2G PHP版本信息:PHP 5.6.14 (cli) 和 PHP 7.0.0 (cli) 均开启opcache 在这里对于小编几个常用的框架**(PhalApi,ThinkPHP

多线程零碎整理

半世苍凉 提交于 2019-12-02 17:58:52
同步 (synchronous)就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。“同”字从字面上容易理解为一起动作,其实不然,“同”字应是指协同、协助、互相配合。能表示前者意义的是“并发”。那么异步就与同步相反,就像两个人走路,每个人按照自己的节奏走,步伐不一定要一致。 百科词条: CPU时间片轮转调度 , 时间片轮转调度算法 同步,异步,并发,并行: b站,多线程第二个视频 、 1 、 2 并发和并行的区别 就是一个人同时吃三个馒头和三个人同时吃三个馒头; 异步和同步 :ajax查询就是异步操作(没有返回结果,但是你可以在展示数据的部分写一些内容),非ajax查询就是同步操作(没结果时页面空白不能操作,有返回结果后,才能出现内容进行其他操作) 来源: https://www.cnblogs.com/anjun-xy/p/11756640.html

Inside AbstractQueuedSynchronizer (4)

情到浓时终转凉″ 提交于 2019-12-02 08:31:02
3.6 ConditionObject AbstractQueuedSynchronizer的内部类ConditionObject实现了Condition接口。Condition接口提供了跟Java语言内置的monitor机制类似的接口:await()/signal()/signalAll(),以及一些支持超时和回退的await版本。可以将任意个数的ConcitionObject关联到对应的synchronizer,例如通过调用ReentrantLock.newCondition()方法即可构造一个ConditionObject实例。每个ConditionObject实例内部都维护一个ConditionQueue,该队列的元素跟AbstractQueuedSynchronizer的WaitQueue一样,都是Node对象。 ConditionObject的await()代码如下: Java代码 public final void await() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); Node node = addConditionWaiter(); int savedState = fullyRelease(node); int

java并发(一)wait,notify的使用

旧时模样 提交于 2019-12-02 08:21:54
Java是第一个内置对多线程支持的主流编程语言。在Java5之前,对多线程的支持主要是通过对块结构的同步实现的(synchronized配合wait,notify,notifyAll),Java5引入了java.util.concurrent包,提供了对多线程编程的更高层的支持。 在Java中,除了int等基本类型之外,一切皆为对象。synchronized关键字以及Object类中的wait,notify和notifyAll方法为我们编写多线程程序提供了原始的支持。 例如: public class A { public synchronized void fun() { ... } } 在调用方法fun之前,调用该方法的执行线程必须要先获得类A的实例(a)的对象锁。上面的方法fun在功能上等同于: public void fun() { synchronized(this) { ... } } 在执行fun之前,要获取a的对象锁,在方法fun返回之前,要释放a的对象锁。 通常可以使用synchronized和notify,notifyAll以及wait方法来实现线程之间的数据传递及控制。对于对象obj来说: obj.wait():该方法的调用,使得调用该方法的执行线程(T1)放弃obj的对象锁并阻塞,直到别的线程调用了obj的notifyAll方法

POSIX 多线程程序设计-概述

二次信任 提交于 2019-12-01 21:49:11
术语定义 同步与异步 同步(synchronous)意味着同时在一起工作。例如聊天室和在线会议就是同步的好例子,在聊天室中,人们对彼此的对话会立即得到反应。 同步相对来说比较简单,但开销相对较大。 异步(asynchronous) 表明事情相互独立地发生, 异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送。例如论坛和电子邮件就是采用异步通信的一个好例子,这样沟通的双方都会有足够的时间去思考。 异步增加了复杂性以及更加麻烦的调试过程。如果你没有同时执行多个活动, 那么异步就没有什么优势。 如果你开始了一个异步活动, 然后什么也不做等待它结束, 则你并没有从异步那儿获得太多好处。 并发与并行 并发(concurrency ) 的意思是指事情同时发生。 也是指让实际上可能串行发生的事情好像同时发生一样。 并发描述了单处理器系统中线程或进程的行为特点。在 POSIX 中,并发的定义要求“延迟调用线程的函数不应 该导致其他线程的无限期延迟。 并行(parallelism) 指并发序列同时执行, 换言之,软件中的“并行”语言中的“并发”是相同的意思, 而区別于软件中的“并发”。指事情在相同的方向上独立进行(没有交错)。 真正的并行只能在多处理器系统中存在, 但是并发可以在单处理器系统和多处理器系统中都存在。 并发能够在单处理器系统中存在是因为并发实际上是并行的假象。

浅析AQS

拟墨画扇 提交于 2019-12-01 17:10:17
#前言 好久没写blog了,最近学车,时间真的少了很多,花了一些时间写了一篇AQS,请大家指正。 概述 翻阅AbstractQueuedSynchronizer的源码,会发现如下注释: Pprovides a framework for implementing blocking locks and related synchronizers (semaphores, events, etc) that rely on first-in-first-out (FIFO) wait queues. AbstractQueuedSynchronizer提供一个基于FIFO队列的框架,该框架用于实现阻塞锁和相关同步器(例如:semaphores)。 如此可知,AbstractQueuedSynchronizer可以视为JDK同步器的框架,理解它,有助于理解JDK的同步器。 框架说明 本人依据JDK源码中的注释结合并发经验,总结了如下AQS框架说明: AQS是依赖状态进行同步操作的,其内部使用一个整形变量state,来表示同步状态,此状态值依据具体的同步器语义实现。例如:在CountDownLatch中state即为需要等待的线程数。 AQS的子类必须定义在获取和释放上对应的状态值。对于AQS状态变量的操作必须使用getState,setState,compareAndSetState

进程、线程、协程基本概念理解

三世轮回 提交于 2019-12-01 16:24:30
概述 最近接触一些进程、线程、协程、相关的东西,总是容易搞混淆,或者出错,专门想总结下这块的几个概念的问题! 进程 进程之间不共享任何状态 进程的调度由操作系统完成 每个进程都有自己独立的内存空间 进程间通讯主要是通过信号传递的方式来实现的,实现方式有多种,信号量、管道、事件等,任何一种方式的通讯效率都需要过内核,导致通讯效率比较低 由于是独立的内存空间,上下文切换的时候需要保存先调用栈的信息、cpu各寄存器的信息、虚拟内存、 以及打开的相关句柄等信息,所以导致上下文进程间切换开销很大,通讯麻烦。 线程 线程之间共享变量,解决了通讯麻烦的问题 对于变量的访问需要锁 线程的调度主要也是有操作系统完成 一个进程可以拥有多个线程,但是其中每个线程会共享父进程像操作系统申请资源,这个包括虚拟内存、文件等,由于是共享资源,所以创建线程所需要的系统资源占用比进程小很多,相应的可创建的线程数量也变得相对多很多。 线程时间的通讯除了可以使用进程之间通讯的方式以外还可以通过共享内存的方式进行通信,所以这个速度比通过内核要快很多。 另外在调度方面也是由于内存是共享的,所以上下文切换的时候需要保存的东西就像对少一些,这样一来上 下文的切换也变得高效。 协程 协程的调度完全由用户控制 一个线程可以有多个协程,用户创建了几个线程,然后每个线程都是循环按照指定的任务清单顺序完成不同的任务

[转载]并行与并发的区别

懵懂的女人 提交于 2019-12-01 06:19:36
[转载]并行与并发的区别 本文转载自https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/,仅做个人学习使用,侵权请联系删除 “并发” 指的是程序的结构,“并行” 指的是程序运行时的状态 并行(parallelism) 这个概念很好理解。所谓并行,就是 同时执行 的意思,无需过度解读。判断程序是否处于并行的 状态 ,就看同一时刻是否有超过一个 “工作单位” 在运行就好了。所以, 单线程永远无法达到并行状态 。 要达到并行状态,最简单的就是利用多线程和多进程。但是 Python 的多线程由于存在著名的 GIL,无法让两个线程真正 “同时运行”,所以实际上是无法到达并行状态的。 并发(concurrency) 要理解 “并发” 这个概念,必须得清楚, 并发指的是程序的 “结构” 。当我们说这个程序是并发的,实际上,这句话应当表述成 “这个程序采用了支持并发的设计”。好,既然并发指的是人为设计的结构,那么怎样的程序结构才叫做支持并发的设计? 正确的并发设计的标准是:使多个操作可以在重叠的时间段内进行 (two tasks can start, run, and complete in overlapping time periods) 。 这句话的重点有两个。我们先看 “(操作)在重叠的时间段内进行” 这个概念

mysql并发插入重复数据问题的解决思路

爷,独闯天下 提交于 2019-12-01 06:01:26
一、问题描述 涉及到的功能是一个表单页面添加数据,后端接口的功能就是往数据库中写入表单的数据,系统属于后台系统,但因为跟钱有关,添加的数据要保证同一次填写的数据只能入一次库。 测试很负责任,在测试保存时开启全部能量狂点保存按钮,结果出现了多条一样的数据,问题由此产生 分析问题,原因有两个:1. 表单没有做防重复提交,导致出现多个请求,2. 后端保存接口并发时无法判断同一表单的请求。 二、过程 Round 1:在表单提交后,把按钮置为disabled FAIL:这种解决方案太依赖前端,并且无法保证刷新时重复提交表单 Round 2:做表单防重复提交,在页面打开时,在session和页面中设置token,表单提交时判断token,并删除session中的token FAIL:目前的项目中没有先例,要解决防重复提交的问题应考虑整个项目的处理机制,不应特殊化某一功能,对后期维护不好,同时多个页面的token在session中也需要有不同的key,而项目部署时有多个实例,用session实现需要太多的前提条件 Round 3:既然不通过防重复提交解决,那就解决并发问题吧,java中提供了java本身就提供了synchornized和Lock,不仅如此,mysql也提供了get_lock,release_lock方法,用以获取和释放锁 FAIL

Java并发教程-1进程和线程

邮差的信 提交于 2019-12-01 04:52:20
http://www.iteye.com/magazines/131 计算机的使用者一直以为他们的计算机可以同时做很多事情。他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理程序上工作。甚至对于单个应用程序,他们任然期待它能在在同一时间做很多事情。举个例子,一个流媒体播放程序必须能同时完成以下工作:从网络上读取数字音频,解压缩数字音频,管理播放和更新程序显示。甚至文字处理器也应该能在忙于重新格式化文本和刷新显示的情况下同时响应键盘和鼠标事件。这样的软件就被称为并发软件。 通过Java语言和Java类库对于基础并发的支持,Java平台具有完全(from the ground up )支持并发编程的能力。从JDK5.0起,Java平台还引入了高级并发APIs。这个课程不仅涵盖了Java平台基础并发内容,还对高级并发APIs有一定的阐述。 进程和线程 在并发编程中,有两个基本的执行单元:进程和线程。在java语言中,并发编程最关心的是线程,然而,进程也是非常重要的。 即使在只有单一的执行核心的计算机系统中,也有许多活动的进程和线程。因此,在任何给定的时刻,只有一个线程在实际执行。处理器的处理时间是通过操作系统的时间片在进程和线程中共享的。 现在具有多处理器或有多个执行内核的多处理器的计算机系统越来越普遍,这大大增强了系统并发执行的进程和线程的吞吐量