`
文章列表

php中实现多进程

    博客分类:
  • PHP
使用PHP真正的多进程运行模式,适用于数据采集、邮件群发、数据源更新、tcp服务器等环节。 PHP有一组进程控制函数(编译时需要 –enable-pcntl与posix扩展),使得php能在*nix系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。 PCNTL使用ticks来作为信号处理机制(signal handle callback mechanism),可以最小程度地降低处理异步事件时的负载。何谓ticks?Tick 是一个在代码段中解释器每执行 N 条低级语句就会发生的事件,这个代码段需要通过declare来指定。 常用的PCNTL函数1. pcntl_ala ...
我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的. 也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础. 假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php 那么这两个文件将是同时执行的. (PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出) 有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢? 其实可是通过参数来控制a.php来运行哪一段程序. 下面看一个例子: //a.php PHP代码:------------------ ...

最长递增子序列

最长递增子序列问题的求解   最长递增子序列问题是一个很基本、较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想,能够锻炼设计较复杂算法的思维,我对这个问题进行了较深入的分析思考,得出了几种复杂度不同算法,并给出了分析和证明。 一,    最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2& ...
一、InnoDB和MyISAM的区别   InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理, MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。这样就可以根据数据表不同的用处是用不同的存储类型。另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持 ...
虚函数的定义要遵循以下重要规则:   1.如果虚函数在基类与派生类中出现,仅仅是名字相同,而形式参数不同,或者是返回类型不同,那么即使加上了virtual关键字,也是不会进行滞后联编的。 2.只有类的成员函数才能说明为虚函数,因为虚函数仅适合用与有继承关系的类对象,所以普通函数不能说明为虚函数。 3.静态成员函数不能是虚函数,因为静态成员函数的特点是不受限制于某个对象。 4.内联(inline)函数不能是虚函数,因为内联函数不能在运行中动态确定位置。即使虚函数在类的内部定义定义,但是在编译的时候系统仍然将它看做是非内联的。 5.构造函数不能是虚函数,因为构造的时候,对象还是一片位定型的空间,只有 ...
有N个大小不等的自然数(1--N),请将它们由小到大排序。   要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。   int cnt = 0;//辅助变量,不是算法组成部分,只是用于计数,实际应用可以不要void sort(int arr[], int n){ int t; /**//*临时变量:空间复杂度O(1)*/   //可以证明这个算法每次交换必然将一个数字正确安排到位,而且最多只有N次交换。   //具体体现在cnt的值上,所以虽然是二重循环仍然是时间复杂度O(n),因为最多交换2*N次 for (int i = 1; i <= n; i++){  while(ar ...
(转自http://blog.csdn.net/jiangnanyouzi/article/details/6827534) 前几天朋友跟我说了一道面试题:五笔的编码范围是a到y的25个字母,从1位到4位的编码, 如果将五笔的编码按字典序排序,形成数组如下:a, aa, aaa, aaaa, aaab, aaac, ..., b, ba, baa, baaa, baab...yyyx, yyyy 其中a的索引是0,aa的索引是1,aaa的索引是2,aaaa的索引是3,以此类推: 1)、编写一个函数,输入是任意一个合法的字符串,输出这个字符串对应的索引; 2)、编写一个函数,输入是任 ...
解法:首先假设是32位无符号整数。1. 读一遍10G个整数,把整数映射到256M个区段中,用一个64位无符号整数给每个相应区段记数。说明:整数范围是0 - 2^32 - 1,一共有4G种取值,映射到256M个区段,则每个区段有16(4G/256M = 16)种值,每16个值算一段, 0~15是第1段,16~31是第2段,……2^32-16 ~2^32-1是第256M段。一个64位无符号整数最大值是0~8G-1,这里先不考虑溢出的情况。总共占用内存256M×8B=2GB。2. 从前到后对每一段的计数累加,当累加的和超过5G时停止,找出这个区段(即累加停止时达到的区段,也是中位数所在的区段)的数值范 ...
  1、进程和线程有什么区别?    进程间是独立,这体现在内存空间,上下文环境上,线程运行在进程空间内;    一般而言(不使用特殊技术),进程无法突破进程边界存取其他进程内的存储空间,而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间;    同一进程中的两段代码不能够同时执行,除非引入线程;    线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。线程占用的资源要少于进程所占用的资源。进程和线程都可以有优先级。   2、AND信号量集机制的基本思想是什么,它能解决什么问题?    AND同步机制的基本思想是,将进程在整个运行过程中所需 ...
1、什么是Keep-Alive模式? 我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议);当使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。 http 1.0中默认是关闭的,需要在http头加入"Connection: Keep-Alive",才能启用Keep-Alive;http 1.1中 ...

HTTP协议详解

    博客分类:
  • HTTP
(转自http://blog.csdn.net/gueter/article/details/1524447) 引言                                        HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提 ...
1、TCP传输的可靠性是通过以下几点来保证的   0:TCP 服务器和客户端在传输之前先建立起连接 1:TCP协议把应用层传来的数据分成何时大小的分段,然后将分段发送出去,发出后启动定时器,在定时器未超时的时间内等待接受 ...
问题: 给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词?   解法一: 使用hash_map和链表。 首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dgoo。 使用链表将所有兄弟单词串在一起,hash_map的key为单词的key,value为链表的起始地址。 开始时,先遍历字典,将每个单词都按照key加入到对应的链表当中。当需要找兄弟单词 ...
前段时间 写了个 google suggestion之类 的东西。写之前在网上搜了一些实现的方法,大多数文章介绍了前台的实现,后台的实现 大多借助了数据库的查询 或者是 lucene的前缀搜索+单词搜索。但是这些后台的方法仅仅适合小数据量的搜索,不适合大数据量的搜索。因为 数据量大会造成响应时间相当慢的情况,作为搜索建议,是不可以忍受的。 经过琢磨,研究了一下GOOGLE的表现。发现 1.如果网速快的话,其响应速度很快。2. 不仅能搜出前缀匹配,而且可以搜出任意中间单词的前缀匹配。 我想到的解决方法: 1.数据结构:压缩trie树,利用它可以得到前缀匹配的keyword。可实现goog ...
printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多吗?在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。所以本文着重介绍sprintf,有时也穿插着用用pritnf。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, ...
Global site tag (gtag.js) - Google Analytics