php锁机制
⑴ php队列执行任务的时候,如何防止进程之间抢夺资源
实际上有一个非常简单的办法,你可以利用数据库操作的原子性来实现,不需要那么复杂的锁机制,甚至队列。就按你的方法来,假设任务数据表 task 里有两个字段 id, status,我们定义status三个状态
0: 待处理1: 正在处理2: 处理完成
假设你有一堆 PHP 进程都用如下 sql 语句去取出数据库里的待处理任务
SELECT * FROM task WHERE status = 0
取出来以后,我们为了防止其他用户不再重复取出要把它的状态标记为 1
UPDATE task SET status = 1 WHERE id = xxx
但是等等,这样就会产生如你所说的资源抢夺,但如果加上一个简单的技巧就可以避免,你把语句变成这样
UPDATE task SET status = 1 WHERE id = xxx AND status = 0
熟悉一点数据库的人可能会说这样还是避免不了抢夺,只是避免了重复写入。
我要说的是,能避免重复写入就够了,我们的进程在执行完这条操作后,去获取 affected_rows ,即更新的条数,根据数据库的原子性,只有第一个抢占的进程才会返回 1,它可以进行后面的操作。而剩下返回 0 的进程,直接进入下一个等待流程即可。
⑵ php mysql的锁机制 怎么写
MYSQL中的锁:
语法 :
LOCK TABLE 表名1 READ|WRITE, 表名2 READ|WRITE .................. 【锁表】
UNLOCK TABLES 【释放表】
Read:读锁|共享锁 : 所有的客户端只能读这个表不能写这个表
Write:写锁|排它锁: 所有当前锁定客户端可以操作这个表,其他客户端只能阻塞
注意:在锁表的过程中只能操作被锁定的表,如果要操作其他表,必须把所有要操作的表都锁定起来!
PHP中的文件锁 (锁的是文件,不是表)
文件锁的文件与表有什么关系?:一点关系也没有,与令牌相似,谁拿到谁操作。所以表根本没锁。
测试时,有个文件就行,叫什么名无所谓
⑶ PHP下有没有互斥锁的实现方案 - PHP进阶讨论
回复 1# 用memcache每秒10K+的速度应该够了php本身能跑多快?国内某top2公司的手机游戏接入平台每秒才要求20k读,15k写要不行你就换TC性能还是不够你就写个小扩展呗
⑷ php加载ts文件
php以ISAPI方式加载的时候选择ts文件。
不会出现数据不一致或者数据污染php以ISAPI方式加载的时候选择这个版本。
多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。
⑸ PHP下有没有互斥锁的实现方案
木有...至于锁的方案一般由资源自己实现。比如对数据库和缓存的访问。PHP进程都是单线程模型,如果资源不可读写,则阻塞。不过PHP有文件锁的机制,这貌似是PHP唯一支持的锁...
⑹ PHP程序里如何释放内存
这个,不是PHP本身的问题。
而是你的服务器网络带宽的问题。
你用curl请求的是远程的服务器,要占用带宽吧?用户访问你的网站,也要占用带宽吧?于是,你的带宽就悲剧了。
----------------------------------
一个PHP程序执行完,所有的东西就消失了,内存就自动释放了...所以这方面你不需要考虑的。
⑺ thinkphp事务上锁后整个数据库都上锁吗
事务的锁机制应该与thinkphp无关,主要看你采用什么数据库。
⑻ PHP中文件存储是fopen好还是数据库好
如果是用户上传的文件,建议保存在文件系统,位置保存在数据库.如果你要用fopen读写文件,为了保持数据的一致性,所有PHP脚本写该文件时都要用flock加排它锁.如果数据存在数据库的话,则不需要PHP实现锁机制.
⑼ 并发时,php操作mysql需要加锁吗mysql在并发时读写数据表会加锁,我觉得不用再手动加锁,请问是这样吗
你得先了解mysql的表锁机制 以及具体服务器是apache活着nginx 或者别的什么,这都是有区别的