Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

PHP 共享内存使用与信号控制

PHP 共享内存使用与信号控制

共享内存共享内存的使用主要是为了能够在同一台机器不同的进程中共享一些数据,比如在多个 php-fpm 进程中共享当前进程的使用情况。这种通信也称为进程间通信(Inter-Process Communication),简称 IPC。PHP 内置的 shmop 扩展 (Shared Memory Operations) 提供了一系列共享内存操作的函数(可能是用的人不多吧,这一块儿的文档还没有中文翻译)。在 Linux 上,这些函数直接是通过调用 shm* 系列...
PHP 代码规范简洁之道

PHP 代码规范简洁之道

1. 统一的编码规范编码规范往简单说其实就是三个方面:换行空格变量命名放在 PHP 里面,还有一些附加的地方,比如关键字大小写,语法糖的使用(array() 与 [] 等)的问题。之前整理过 PSR 的标准,也找过 php-cs-fixer 这样的工具。这些都是规范代码的重要手段。有统一的标准,配合上工具的检查,形成统一的编码约束不是什么难题。没有规范,不同的人甚至同一个人在空格、换行和命名上都有可能是十分随意的。代码一长,回使整个文件看起来无比杂乱。典型...
PHP7 的抽象语法树(AST)带来的变化

PHP7 的抽象语法树(AST)带来的变化

本文并不会告诉你抽象语法树是什么,这需要你自己去了解,这里只是描述 AST 给 PHP 带来的一些变化。新的执行过程PHP7 的内核中有一个重要的变化是加入了 AST。在 PHP5中,从 php 脚本到 opcodes 的执行的过程是:Lexing:词法扫描分析,将源文件转换成 token 流;Parsing:语法分析,在此阶段生成 op arrays。PHP7 中在语法分析阶段不再直接生成 op arrays,而是先生成 AST,所以过程多了一步:Lex...
R语言--数据预处理

R语言--数据预处理

一、日期时间、字符串的处理日期Date: 日期类,年与日POSIXct: 日期时间类,精确到秒,用数字表示POSIXlt: 日期时间类,精确到秒,用列表表示Sys.date(), date(), difftime(), ISOdate(), ISOdatetime()#得到当前日期时间(d1=Sys.Date()) #日期年月日(d3=Sys.time()) #时间年月日时分秒通过format输出指定格式的时间(d2=date()) #日期和时间年月日时分...
Java 泛型浅析

Java 泛型浅析

泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念。下面,根据以下内容,我们总结下在Java中使用泛型。泛型使用的意义什么是泛型泛型类泛型方法泛型接口泛型擦除通配符泛型使用的意义一份好程序的一个特点就是这个程序是否具有通用性。Java 使用了多态的机制,让我们可以把方法参数类型设置为基类,而调用方法时却可以接受该基类和其子类,让我们编写代码更加通用。后来因为Java单继承受限太多的原因,我们可以把方法的参数设定为接口,直接面...
Java内存模型浅析

Java内存模型浅析

概述衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second,TPS) 是最重要的指标之一,它代表着一秒内服务器平均能响应的请求总数,而TPS值与程序的并发能力又有非常密切的关系。Java内存模型(Java Memory Model,JMM)用来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储...
Java实现线程的三种方式

Java实现线程的三种方式

并发不一定要依赖多线程(如PHP中很常见的多进程并发)。线程的实现各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。每个已经执行start()且还未结束的java.lang.Thread类的实例就代表了一个线程。Thread的所有关键方法都是声明为Native的。在Java API中,一个Native方法往往意味着这个方法没有使用或无法使用平台无关的手段来实现(当然也可能是为了执行效率而使用Native方法...
JVM垃圾收集算法

JVM垃圾收集算法

标记-清除算法(Mark-Sweep)算法分为:“标记”和“清除”两个阶段。主要不足:1)效率问题:标记和清除两个过程的效率都不高2)空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。标记--清除算法示意图:复制算法(Copying)它将可用内存按容量划分为大小相等的两块,每次只使用其中一块...
图的基本概念和表示

图的基本概念和表示

基本概念一个图(graph)G=(V,E)由顶点(vertex)的集V和边(edge)的集E组成。每一条边就是一副点对(v,w),其中v、w ? V。有时也把边称做弧(arc)。有向(directed):如果点对是有序的,那么图就是有向的。有向图(digraph):有向的图有时也叫有向图。路径u,v,u可以被认为是圈,因为(u,v)和(v,u)不是同一条边。无向图:与有向图相对,我们要求边是互异的。这些要求的根据在于无向图中的路径u,v,u不应该被认为是圈...
Java排序算法--归并排序(MergeSort)

Java排序算法--归并排序(MergeSort)

简介归并排序以O(NlogN)最坏情形时间运行,而所使用的比较次数几乎是最优的。这个算法中基本的操作是合并两个已排序的表。基本的合并算法是取两个输入数组A和B,一个输出数组C,以及3个计数器Actr、Bctr、Cctr,它们初始置于对应数组的开始端。A[Actr]和B[Bctr]中的较小者被拷贝到C中的下一个位置,相关的计数器向前推进一步。当两个输入表有一个用完的时候,则将另一个表中剩余部分拷贝到C中。合并两个已排序的表的时间显然是线性的,因为最多进行N-...
Java排序算法--桶式排序(Bucket Sort)

Java排序算法--桶式排序(Bucket Sort)

任何只使用比较的一般排序算法的最坏情况下需要运行时间Ω(NlogN),但是记住,在某些特殊情况下以线性时间进行排序仍然是可能的。一个简单的例子是桶式排序(bucket sort)。为使桶式排序能够正常工作,必须要有一些附加的信息。输入数据A1,A2,A3,…,AN必须只由小于M的正整数组成(显然还可以对其进行扩充)。如果是这种情况,那么算法很简单:使用一个大小为M的称为count的数组,它被初始化为全0。于是,count有M个单元...
Java类与类加载器

Java类与类加载器

虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放在Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。类加载器应用在:类层次划分、OSGi、热部署、代码加密等领域。类与类加载器对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。...
Java排序算法--希尔排序(Shellsort)

Java排序算法--希尔排序(Shellsort)

希尔排序希尔排序:它通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。希尔排序也叫缩减增量排序(diminishing increment sort)。希尔排序使用一个序列h1,h2,h3,…,ht,叫做增量序列(increment sequence)。在使用增量hk的一趟排序之后,对于每一个i我们都有a[i]≤a[i+hk],所有相隔hk的元素都被排序,此时称文件是hk排序...
JVM 垃圾回收算法

JVM 垃圾回收算法

在说垃圾回收算法之前,先谈谈JVM怎样确定哪些对象是“垃圾”。1.引用计数器算法:引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为0的时候,JVM就认为对象不再被使用,是“垃圾”了。引用计数器实现简单,效率高;但是不能解决循环引用问问题(A对象引用B对象,B对象又引用A对象,但是A,B对象已不被任何其他对象引用),同时每次计数器的增加和...
Java 线程安全 Lock

Java 线程安全 Lock

java.util.concurrent.locks 对于线程安全我们前面使用了synchronized关键字,对于线程的协作我们使用Object.wait()和Object.notify()。在JDK1.5中java为我们提供了Lock来实现与它们相同的功能,并且性能优于它们,在JDK1.6时,JDK对synchronized做了优化,在性能上两种方式差距不大了。一、为什么出现lock synchronized修饰的代码块,当一个线程获取了对应的锁,...
Java 线程安全 synchronized

Java 线程安全 synchronized

一、线程安全问题:并发编程的原则:设计并发编程的目的是为了使程序获得更高的执行效率,但绝不能出现数据一致性(数据准确)问题,如果并发程序连最基本的执行结果准确性都无法保证,那并发编程就没有任何意义。为什么会出现数据不正确: 如果一个资源(变量,对象,文件,数据库)可以同时被很多线程使用就会出现数据不一致问题,也就是我们说的线程安全问题。这样的资源被称为共享资源或临界区。 举个例子: 一个共享变量m,现在有两个线程同时对它进行累加操作,各执行100...
Java 线程的终止与线程中断

Java 线程的终止与线程中断

关于线程终止: 1、一般来讲线程在执行完毕后就会进入死亡状态,那该线程自然就终止了。 2、一些服务端的程序,可能在业务上需要,常驻系统。它本身是一个无穷的循环,用于提供服务。那对于这种线程我们该如何结束它呢。 一、线程的终止 在Thread类中JDK给我们提供了一个终止线程的方法stop(); 该方法一经调用就会立即终止该线程,并立即释放对象锁。如果当一个线程执行一半业务而调用了该方法,可能就会产生数据不一致问题。 数据一致性:同一时间点,你在节点A中...
Java 线程协作 wait(等待)与 notiy(通知)

Java 线程协作 wait(等待)与 notiy(通知)

一.wait()、notify()和notifyAll()为了更好的支持多线程之间的协作,JDK提供了三个重要的本地方法//调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的锁.public final void wait() throws InterruptedException { wait(0); }//调用某个对象的notify()方法能够唤醒一个正在等待这个对象的锁的线程,如果有多个线程都在等待这个对象的锁,则只...
基于Java的宽度优先遍历互联网结点

基于Java的宽度优先遍历互联网结点

整个的宽度优先爬虫过程就是从一系列的种子节点开始,把这些网页中(种子结点网页)的“子节点” (也就是超链接)提取出来,放入队列中依次进行抓取。被处理过的链接需要放入一张表(通常称 为 Visited 表)中。每次新处理一个链接之前,需要查看这个链接是否已经存在于 Visited 表 中。如果存在,证明链接已经处理过,跳过,不做处理,否则进行下一步处理。实际的过 程如图 1.5 所示。初始的 URL 地址是爬虫系统中提供的种子 URL...
<< 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 >>