转: http://www.tuicool.com/articles/bqeeey

首先看下下面代码, session1.php 文件

<?php
ini_set('session.save_path', './tmp/'); function open($save_path, $session_name) {
echo __FUNCTION__,"<br/>";
return (true);
} function close(){
echo __FUNCTION__,"<br/>";
return (true);
} function read($id){
echo __FUNCTION__,"<br/>";
} function write($id, $sess_data){
echo __FUNCTION__,"<br/>";
return (true);
} function destroy($id){
echo __FUNCTION__,"<br />";
return(true);
} function gc($maxlifetime){
echo __FUNCTION__,"<br />";
return true;
} session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
register_shutdown_function('test'); function test()
{
echo __FUNCTION__,"<br />";
} session_start();
echo 'aaaaa',"<br />"; /*
结论->session_start开启后, 会自动执行open,read函数。
等页面执行完后,会执行shutdown函数.最后后会把session写入进去,然后执行close关闭文件
从session_start 到页面结束,会一直锁定文件或者保持连接的。
*/

然后通过1个实例子来理解 , 先执行 session2.php 代码, 20秒内执行 session3.php

session2.php 文件

<?php
//执行 session2.php和session3.php,
/*
因为 session2.php 脚本一直没有结束,结束后 session才会执行写入和关闭操作 (看session1.php 结论), session一直被锁定了
因此执行session3.php 时会发现 一直处于阻塞状态。
*/
/*
session_start();
$_SESSION['uname'] = 'lily';
sleep(20);
*/ //如果用以下代码 就没问题了, 立即提交 写入关闭
session_start();
$_SESSION['uname'] = 'lemon';
session_commit();
sleep(20);

session3.php 文件

<?php
session_start();
echo $_SESSION['uname'];

总结:

//可以用 session_commit (别名 session_write_close) 立即执行写入关闭
/*
session_start();
$_SESSION['aaaa'] = 1000;
session_commit(); //执行commit后,直接会调用,wirte,close操作
*/ /*
1.只读取session页面,建议打开后,就直接commit,这是$_SESSION变量已经生成了。 2.有对session进行写入页面,建议修改完$_SESSION后,直接调用commit 3.多次打开并且写入,这个不建议使用,比较打开文件,写入都是耗费时间的。如果能一次搞定的,就不要做多次了。 除非,中间执行很耗时的业务。 后记:其实,使用完session,随手commit也不是坏事,养成习惯后。可以节省性能,减少服务器开销。是个不错选择!欢迎大家交流!
*
/

php session阻塞页面分析及优化 (session_write_close session_commit使用)的更多相关文章

  1. Asp.net项目因Session阻塞导致页面打开速度变慢

    发现罪魁祸首是Session阻塞造成的.默认情况下session状态是“可写状态”(EnableSessionState=”true”),即当用户打开任何一个页面时,该页面的Session就会持有一个 ...

  2. 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session

    什么是 Session 在 web 应用开发中,Session 被称为会话.主要被用于保存某个访问者的数据. 由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的 ...

  3. 1.linux服务器的性能分析与优化

    [教程主题]:1.linux服务器的性能分析与优化 [课程录制]: 创E [主要内容] [1]影响Linux服务器性能的因素 操作系统级 CPU 目前大部分CPU在同一时间只能运行一个线程,超线程的处 ...

  4. 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

    高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

  5. 一:MySQL数据库的性能的影响分析及其优化

    MySQL数据库的性能的影响分析及其优化 MySQL数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数 ...

  6. WebView性能、体验分析与优化

    育新 徐宏 嘉洁 ·2017-06-09 20:03 在App开发中,内嵌WebView始终占有着一席之地.它能以较低的成本实现Android.iOS和Web的复用,也可以冠冕堂皇的突破苹果对热更新的 ...

  7. linux服务器的性能分析与优化(十三)

    [教程主题]:1.linux服务器的性能分析与优化 [主要内容] [1]影响Linux服务器性能的因素 操作系统级 Ø CPU 目前大部分CPU在同一时间只能运行一个线程,超线程的处理器可以在同一时间 ...

  8. 谷歌chrome浏览器network中Stalled分析和优化

    谷歌chrome浏览器network中Stalled分析和优化 问题由来 最近项目上要求首页的加载速度,查看浏览器的network发现接口加载速度非常慢. 问题解决思路 SSL 网上有人因为图片加载, ...

  9. mysql性能优化-慢查询分析、优化索引和配置

    一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connec ...

随机推荐

  1. [转载]tornado.database添加PooledDB连接池功能

    转载自 http://chenxiaoyu.org/2009/12/01/python-tornado-dbutil.html tornado.database模块简单包装了下对MySQL的操作,短小 ...

  2. nginx配置详解(转)

    Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error. ...

  3. 手机端移动端的选择框mobileSelect.js使用

    手机端移动端的选择框mobileSelect.js使用 文件地址:https://github.com/onlyhom/mobileSelect.js 请感兴趣的自行下载 使用过程 1 引入标签 &l ...

  4. 基于二进制RPC协议法的轻量级远程调用框架 ---- Hessian

    使用Java创建Hessian服务有四个步骤: 1.创建Java接口作为公共API                             (client和server端 创建一个相同的借口) 2.使 ...

  5. 可视化库-seaborn-Facetgrid(第五天)

    1. sns.Facetgrid 画一个基本的直方图 import numpy as np import pandas as pd from scipy import stats, integrate ...

  6. python常见异常提示

    PEP8 expected 2 blank lines, found 1 定义方法时,出现期望是2个空白行,但是实际检测到是1个.方法与上面内容间隔期望为两个换行符 PEP8 This diction ...

  7. ios 给图片加文字

    - (UIImage*) drawText:(NSString*)text inImage:(UIImage*)image { //prepare image context UIGraphicsBe ...

  8. MIME(Multipurpose Internet Mail Extensions-多用途互联网邮件扩展)

    MIME MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时 ...

  9. DB分布式 跨库分页

    DB分布式-两种方式 1. JDBC扩展     sharding-jdbc: 直接封装JDBC,代码迁移成本低,适用于任何连接池及ORM框架,JAR包提供服务,未使用中间层,不用额外部署,DBA无需 ...

  10. mysql查看进程

    select * from information_schema.processlist 查询所有连接到数据库的进程信息.