<?php
//获得信号量的方法
$execute = function () {
//(1).创建IPC通信KEY
$key = ftok(__FILE__, 'a');
//(2).获取一个信号量资源句柄
$sem_handler = sem_get($key, 1);
if (sem_acquire($sem_handler, false)) {
echo '进程' . getmypid() . '获得信号量' . PHP_EOL;
//模拟业务执行
sleep(5);
//释放信号量(sem_get函数默认自动释放)
sem_release($sem_handler);
} else {
echo '进程' . getmypid() . '未获得信号量' . PHP_EOL;
}
};
//父进程执行函数
$mainFunc = function ($pid) {
sleep(10);
echo "10秒后所有进程跟我一起死" . PHP_EOL;
};
//(3).模拟父子进程抢占信号
$pid = pcntl_fork();
if ($pid == -1) {
throw new Exception('创建子进程失败');
} elseif ($pid) {
//父进程获取信号量
$execute();
} else {
//子进程获取信号量
$execute();
}//提示:
//1.sem_get函数默认设置为最多1个进程可以获取信号量,所以实现了锁的效果
//2.配合sem_acquire函数的no_wait参数实现阻塞或者非阻塞
//3.整体的效果和文件锁完全一样,但是比文件锁性能更好
<?php echo similar_text("Hello World","Hello Shanghai"); ?> 2.计算两个字符串的相似度,并返回百分比 <?php similar_text("...
/** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @param Decimal $lati...
PHP的session文件夹默认保存在同一个文件,随着访客的增多,访问的速度会非常慢,例如部分管理系统后台每天登陆1000次,1个月就创建了30000个session文件,一年后是多少?假设这个系统的用户是上万人呢?方法1:每个网站使用自己的session文件夹,代码如下:<?php $pat...
md5/sha1+salt方式是目前各大cms常用的加密方式,虽然salt安全,但是各大md5网站也在研究这个方向,那么我们应该选择password_hash动态hash来助力,一种密码有多种hash结果.看代码模拟登陆.<?php //01.注册 $user ='zhang...
php官方已经提供了Iterator(迭代器)接口,通过网上资料的学习,目前看适合超大集合或者数组提取使用。学习一个函数的实现对比内存占用差距.使用迭代器和普通循环实现range()函数。(1).普通循环实现range()函数。function newrange($low, $h...
重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/** * 获取应用根目录 * @return string */ public static function getRootP...