进程锁定问题分析研究

<?php
/**
* 进行写锁定的测试
* 打开线程1
*/
require("file_lock.php");
$lock = new File_Lock(dirname(dirname(__FILE__)) . "/FileLock.lock");
/** 单个线程锁定的速度 1s 钟 3万次。 **/
/** 两个线程写,两万的数据 大概要 7s 钟*/
/** 一个线程写,一万的数据 大概要 3.9s 钟,居然两个文件同时写,要快一点*/
/** 不进行锁定,一个进程 写大概要 2.8s 钟,加锁是有代价的。 */
/** 不进行锁定,两个进程 分布不是很均匀,而且大多数都冲突 */
$lock->writeLock();
$lock->increment();
$lock->unlock();
while ($lock->get() < 2) {
usleep(1000);
}
sleep(1);
echo "begin to runing n";
$t1 = microtime(true);
for ($i = 0; $i < 10000; $i++)
{
$lock->writeLock();
$lock->increment(1);
$lock->unlock();
}
$t2 = microtime(true) - $t1;
echo $t2;
?>

<?php
class File_Lock
{
private $name;
private $handle;
private $mode;
function __construct($filename, $mode = 'a+b')
{
global $php_errormsg;
$this->name = $filename;
$path = dirname($this->name);
if ($path == '.' || !is_dir($path)) {
global $config_file_lock_path;
$this->name = str_replace(array("/", "\"), array("_", "_"), $this->name);
if ($config_file_lock_path == null) {
$this->name = dirname(__FILE__) . "/lock/" . $this->name;
} else {
$this->name = $config_file_lock_path . "/" . $this->name;
}
}
$this->mode = $mode;
$this->handle = @fopen($this->name, $mode);
if ($this->handle == false) {
throw new Exception($php_errormsg);
}
}
public function close()
{
if ($this->handle !== null ) {
@fclose($this->handle);
$this->handle = null;
}
}
public function __destruct()
{
$this->close();
}
public function lock($lockType, $nonBlockingLock = false)
{
if ($nonBlockingLock) {
return flock($this->handle, $lockType | LOCK_NB);
} else {
return flock($this->handle, $lockType);
}
}
public function readLock()
{
return $this->lock(LOCK_SH);
}
public function writeLock($wait = 0.1)
{
$startTime = microtime(true);
$canWrite = false;
do {
$canWrite = flock($this->handle, LOCK_EX);
if(!$canWrite) {
usleep(rand(10, 1000));
}
} while ((!$canWrite) && ((microtime(true) - $startTime) < $wait));
}
/**
* if you want't to log the number under multi-thread system,
* please open the lock, use a+ mod. then fopen the file will not
* destroy the data.
*
* this function increment a delt value , and save to the file.
*
* @param int $delt
* @return int
*/
public function increment($delt = 1)
{
$n = $this->get();
$n += $delt;
$this->set($n);
return $n;
}
public function get()
{
fseek($this->handle, 0);
return (int)fgets($this->handle);
}
public function set($value)
{
ftruncate($this->handle, 0);
return fwrite($this->handle, (string)$value);
}
public function unlock()
{
if ($this->handle !== null ) {
return flock($this->handle, LOCK_UN);
} else {
return true;
}
}
}
?>

 

时间: 2024-08-22 14:15:52

进程锁定问题分析研究的相关文章

PHP 进程锁定问题分析研究_php技巧

1. 区分读锁定 和 写 锁定. 如果每次都使用 写锁定,那么连多个进程读取一个文件也要排队,这样的效率肯定不行. 2. 区分 阻塞 与 非 阻塞模式. 一般来说,如果一个进程在写一个文件的时候,另外一个进程应该被阻塞,但是,很多时候,我们可以先干点别的事情, 然后再判断一下是否有其他人在写文件,如果没有,再加入数据,这样的效率更高. 3. 修复了 锁定文件在linux 上的bug,特别是 在 gfs 文件系统上的bug. 代码如下: 复制代码 代码如下: <?php class File_Lo

[转贴]Gloomy对Windows内核的分析(研究CreateProcess)

                      (转载)Gloomy对Windows内核的分析(研究CreateProcess) 我给出一个反汇编Win32 API函数CreateProcess的例子,来演示研究子系统的技术,同时演示Win32是如何与Windows NT的执行系统协同工作的. 从MSDN中得到函数原型: BOOL CreateProcess(  LPCTSTR lpApplicationName,// pointer to name of executable module  LP

文件被system进程锁定,不能删除

文件被system进程锁定,不能删除,没有明显用户进程操作此文件. 软件UNLOCKER,WHOLOCKME,LOCK HUNTER之类的,可能需要重启才能解决问题,这在生产环境 中是不可接受的. 能作的还是慢慢搜索可用解决方案.. 然后,找到此个文档,显示了被SYSTEM占用文件的解决办法,并将此归为WIN2008的一个小BUG,但不知道实际效果如何..: http://stackoverflow.com/questions/4378192/windows-2008-r2-kernel-sys

中国的互联网创业之抄袭与反抄袭分析研究

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天,我们仅从网络创业.网站策划与网站运营的角度,分析互联网模式的成功"抄袭"与反"抄袭". "抄袭"是互联网行业的独特风景,君不见,一个新的成功的互联网模式出来,立刻会从大洋彼岸抄到中国大地,然后在中国大地遍地开花.hao123站长月赚百万被披露,一夜之间中国多了上万网址站,&qu

《中国人工智能学会通讯》——6.20 情感分析研究任务

6.20 情感分析研究任务 情感分析任务和其他自然语言处理任务一样,首先需要资源的支持,在此基础上,开展情感分析元素抽取以及文本情感分类工作,下面进行简要介绍. 文本情感资源构建 情感资源一般包括情感词典和情感语料库.目前人工构建情感词典较多的是收集了褒贬情感词的词典,如哈佛大学 GI(General Inquiry)情感词典1 .匹兹堡大学提供的 OpinionFinder 主观情感词典2 .伊利诺伊大学 Bing Liu 提供的词典资源 3 ,而对于喜.怒.哀.乐.悲.恐.惊等情感相应的词典

如何分析研究网站未来客户的走势与趋向

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 每一名站长应该都知道网站准备工作的重要性,不管从哪一方面来看网站想要在今后能够细水长流都必须做好网站的未来客户走势与趋向分析研究,只有做好了未来客户的分析研究才能够保证网站在今后的运营之中不出现错误路线,那么作为一名站长如何去分析研究网站未来客户的走势与趋向呢? 分析网站用户需求,做好网站前期定位 既然要让网站细水长流,那么首先就应该做好网站

StockCall完成对分众传媒分析研究

北京时间1月7日凌晨消息,美国金融服务网站StockCall.com今天公布了针对广告行业的全面研究报告,并已经完成了对分众传媒(Nasdaq:FMCN)和宏盟集团(Omnicom Group)的分析研究. 报告指出,经济衰退周期对广告公司的打击很大,原因是希望削减预算的公司经常会首先减少使用广告服务,其结果是广告公司本身会被迫削减成本.现在,由于广告支出正在上升的缘故,包括分众传媒和宏盟集团在内的广告行业今年将会实现良好的增长. 智能手机及相关广告业务的增长对2011年的广告行业来说十分关键.

[文档]云计算方案分析研究

云计算方案分析研究 张建成 ,宋丽华 ,鹿全礼 ,郭锐 ,刘永泉 研究典型的云计算方案,理解各云计算方案的原理,进一步推动云计算的发展.在了解了云计算的发展趋势的基础上,介绍了云计算的概念.特点.服务模式和类型,比较分析了像亚马逊.谷歌和微软等典型的云计算厂商的云计算解决方案.在分析比较了各典型云计算方案的基础上,了解了各云计算方案的侧重点.不同厂商基于云计算提供的云计算解决方案的侧重点各不相同,针对具体的应用需求,提供相应的解决方案,这意味着云计算将有广泛的应用前景. 关键词:云计算:云计算方

基于云计算的病毒恶意软件分析研究

基于云计算的病毒恶意软件分析研究 南京航空航天大学  孟超 本文提出了基于云计算的动态行为分析方案,该方案利用云计算分布式计算的特点,在云计算多个虚拟机结点上并行的完成对病毒恶意软件多条执行路径的分析,对虚拟机中系统调用的监控发现病毒恶意软件在特定的条件下触发的恶意行为.采用PIF算法来形式化的描述可疑文件分析和报告返回的过程,对该算法的改进也同时提高了分析的效率,PIF算法是分布式算法特别适合在云计算环境中执行.实验结果表明,该模型能够检测出病毒恶意软件的条件触发行为,并且可以发现触发恶意行为