当使用PHP Yaf框架,如果某个 Action 在返回响应(输出页面或者返回json)之前,启用了session,那么将会在响应头里面加上强制不缓存的响应头,也就是如下的三个响应头。
  
  Expires: Thu, 19 Nov 1981 08:52:00 GMT
  
  Cache-Control: no-store, no-cache, must-revalidate
  
  Pragma: no-cache
  
  测试代码
  
  class IndexController extends Yaf_Controller_Abstract {
  
  // 带有session
  
  public function sessionAction() {
  
  $sessionInstance = \Yaf_Session::getInstance();
  
  $this->getView()->assign("content", "Hello World");
  
  $this->display("index");
  
  return false;
  
  }
  
  // 没有session
  
  public function noSessionAction() {
  
  $this->getView()->assign(www.fengshen157.com"content", "Hello World");
  
  $this->display("index");
  
  return false;
  
  }
  
  }
  
  启用session的请求响应
  
  $ curl -si http://127.0.0.1/index/session
  
  HTTP/1.1 200 OK
  
  Server: openresty/1.11.2.5
  
  Date: Wed, 20 Feb 2019 02:54:47 GMT
  
  Content-Type: text/html; charset=UTF-8
  
  Transfer-Encoding: chunked
  
  Connection: keep-alive
  
  X-Powered-By: PHP/7.0.25
  
  Set-Cookie: PHPSESSID=lf72vsbla12b2431evhp9mq7l6; path=/
  
  Expires: Thu, 19 Nov 1981 08:52:00 GMT
  
  Cache-Control: no-store,www.078881.cn no-cache, must-revalidate
  
  Pragma: no-cache
  
  <html>
  
  <head>
  
  <title>Hello World<www.tianshengyuLe1.cn /title>
  
  </head>
  
  <body>
  
  Hello World </body>
  
  </html>
  
  未启用session的请求响应
  
  $ curl -si http://127.0.0.1/index/nosession
  
  HTTP/1.1 200 OK
  
  Server: openresty/1.11.2.5
  
  Date: Wed, 20 Feb 2019 02:54:40 GMT
  
  Content-Type: text/html;www.yinxionghui1.com charset=UTF-8
  
  Transfer-Encoding: chunked
  
  Connection: keep-alive
  
  X-Powered-By: PHP/7.0.25
  
  <html>
  
  <head>
  
  <title>Hello World</title>
  
  </head>
  
  <body>
  
  Hello World </body>
  
  </html>
  
  整个框架以C API为界,分为前端和后端两大部分。
  
  前端:提供编程模型,多语言的接口支持,比如Python Java C++等。通过C API建立前后端的连接,后面详细讲解。
  
  后端:提供运行环境,完成计算图的执行。进一步分为4层
  
  运行时:分为分布式运行时和本地运行时,负责计算图的接收,构造,编排等。
  
  计算层:提供各op算子的内核实现,例如conv2d, relu等
  
  通信层:实现组件间数据通信,基于GRPC和RDMA两种通信方式
  
  设备层:提供多种异构设备的支持,如CPU GPU TPU FPGA等
  
  模型构造和执行流程
  
  TensorFlow的一大特点是,图的构造和执行相分离。用户添加完算子,构建好整图后,才开始进行训练和执行,也就是图的执行。大体流程如下
  
  图构建:用户在client中基于TensorFlow的多语言编程接口,添加算子,完成计算图的构造。
  
  图传递:client开启session,通过它建立和master之间的连接。执行session.run()时,将构造好的graph序列化为graphDef后,以protobuf的格式传递给master。
  
  图剪枝:master根据session.run()传递的fetches和feeds列表,反向遍历全图full graph,实施剪枝,得到最小依赖子图
  
  图分裂:master将最小子图分裂为多个Graph Partition,并注册到多个worker上。一个worker对应一个Graph Partition。
  
  图二次分裂:worker根据当前可用硬件资源,如CPU GPU,将Graph Partition按照op算子设备约束规范(例如tf.device('/cpu:0'),二次分裂到不同设备上。每个计算设备对应一个Graph Partition。
  
  图运行:对于每一个计算设备,worker依照op在kernel中的实现,完成op的运算。设备间数据通信可以使用send/recv节点,而worker间通信,则使用GRPC或RDMA协议。
  
  3 前端多语言实现 - swig包装器
  
  TensorFlow提供了很多种语言的前端接口,使得用户可以通过多种语言来完成模型的训练和推断。其中Python支持得最好。这也是TensorFlow之所以受欢迎的一大原因。前端多语言是怎么实现的呢?这要归功于swig包装器。
  
  swig是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。在TensorFlow使用bazel编译时,swig会生成两个wrapper文件
  
  pywrap_tensorflow_internal.py:对接上层Python调用
  
  pywrap_tensorflow_internal.cc:对接底层C API调用。
  
  pywrap_tensorflow_internal.py 模块被导入时,会加载_pywrap_tensorflow_internal.so动态链接库,它里面包含了所有运行时接口的符号。而pywrap_tensorflow_internal.cc中,则注册了一个函数符号表,实现Python接口和C接口的映射。运行时,就可以通过映射表,找到Python接口在C层的实现了。
  
  4 tensorflow 源码结构
  
  TensorFlow源码基本也是按照框架分层来组织文件的。如下
  
  其中core为tf的核心,它的源码结构如下
  
  5 总结
  
  TensorFlow框架设计精巧,代码量也很大,我们可以从以下部分逐步学习
  
  TensorFlow内核架构和源码结构。先从全局上对框架进行理解。
  
  前后端连接的桥梁--Session,重点理解session的生命周期,并通过相关源码可以加深理解Python前端如何调用底层C实现。
  
  TensorFlow核心对象—Graph。图graph是TensorFlow最核心的对象,基本都是围绕着它来进行的。graph的节点为算子operation,边为数据tensor。
  
  TensorFlow图的节点 -- Operation。operation是图graph的节点,承载了计算算子。
  
  TensorFlow图的边 -- Tensor。Tensor是图graph的边,承载了计算的数据。
  
  TensorFlow本地运行时。
  
  TensorFlow分布式运行时。和本地运行时有一些共用的接口,但区别也很大。
  
  TensorFlow设备层。主要了解设备层的定义规范,以及实现。
  
  TensorFlow队列和并行运算。
  
  TensorFlow断点检查checkpoint,模型保存Saver,以及可视化tensorboard。这三个为TensorFlow主要的工具。

浅谈 PHP Yaf 开启session之后对响应头的影响的更多相关文章

  1. 浅谈微信小程序对于房地产行业的影响

    前几日,我们曾经整理过一篇文章是关于微信小程序对于在线旅游业的影响的一些反思(浅谈微信小程序对OTA在线旅游市场的影响),近日由于生活工作的需要走访了一些房地产的住宅商品房,突然想到微信小程序对于房地 ...

  2. 浅谈Session的使用(原创)

    目录 浅谈Session的使用(原创) 1.引言 2.Session域的生命周期 2.1 Session的创建 2.2 Session的销毁 3.那么,session被销毁后,其中存放的属性不就都访问 ...

  3. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  4. 浅谈cookie 和session 的区别

    具体来说 cookie 是保存在“客户端”的,而session是保存在“服务端”的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域: 如果cooki ...

  5. ASP.NET中Session的个人浅谈

    看到博客园的一个哥们写的面试经历,想到了面试中常问到的Session,一时手痒就谈下自己对Session的理解,这东西最开始在用户登录登出的时候用到过,后来一直没怎么用过,里面还是有很多知识点值得注意 ...

  6. Session、Cookie、Token 【浅谈三者之间的那点事】

    Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie 的主要目的 ...

  7. 浅谈 Requests包

    浅谈 Requests包 一:Requests包是做什么的? 简单地说,是用python处理HTTP的一个包. 它的标志也非常有气质,是一个双蛇杖,按照官方的说法,一条蛇代表client,一条代表se ...

  8. MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等

    MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化… 这是一个漫长且考 ...

  9. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

随机推荐

  1. 小佬頭眼里的读研VS工作

    最近小佬頭在各种平台和论坛看到很多临近毕业的本科生在纠结读研和工作.于他们来说,人生到了一个十字路口,需要做出一个选择然后继续前行,今天小佬頭就来聊聊读研和工作的话题. 其实有这个考虑的同学不在少数, ...

  2. 【UGUI】 (三)------- 背包系统(上)之简易单页背包系统及检索功能的实现

    背包系统,无论是游戏还是应用,都是常常见到的功能,其作用及重要性不用我多说,玩过游戏的朋友都应该明白. 在Unity中实现一个简易的背包系统其实并不是太过复杂的事.本文要实现的是一个带检索功能的背包系 ...

  3. TPO-21 C2 Which elective courses to take

    /* 加粗:语音部分 * 红色:单词部分 * 斜体:语法部分 * 下划线:信号词/句 */ 第 1 段 1.Listen to a conversation between a student and ...

  4. AssetBundle压缩/内部结构/下载和加载

    一.AssetBundle的压缩方式   Unity支持三种AssetBundle打包的压缩方式:LZMA, LZ4, 以及不压缩.    1.LZMA压缩方式  是一种默认的压缩形式,这种标准压缩格 ...

  5. NO--11关于"this"你知道多少

    为了更好地理解 this,将 this 使用的场景分成三类: 在函数内部 this 一个额外的,通常是隐含的参数. 在函数外部(顶级作用域中): 这指的是浏览器中的全局对象或者 Node.js 中一个 ...

  6. eclipse检出SVN代码的详细流程

    1.添加SVN资源库位置(未安装SVN,请先安装SVN) 2.因为该项目不是maven项目 所以还需要加入jar包(将项目lib里面的jar都Buile Path) 3.我这个项目需要修改编码格式 右 ...

  7. 浏览器初始页面设置及被hao123劫持解决办法

    最近在用浏览器时打开初始页面都是hao123,喵喵喜欢简单干净的页面,就去设置初始页面. 此处放置初始页面参考(并不太难): https://jingyan.baidu.com/article/11c ...

  8. 【坚持】Selenium+Python学习记录 DAY8

    2018/05/ 28 [来源:菜鸟教程](http://www.runoob.com/python3/python3-examples.html) 继续敲类相关的代码 #No.1 class peo ...

  9. python初学者随笔Week2

    一.集合 去重,把一个列表变成集合,自动去重 关系测试,测试两组数据的交集,并集,差集关系 集合是无序的 集合的操作: list_1 = [1,4,5,7,3,6,7,9] list_1 = set( ...

  10. 基本数据结构 -- 栈简介(C语言实现)

    栈是一种后进先出的线性表,是最基本的一种数据结构,在许多地方都有应用. 一.什么是栈 栈是限制插入和删除只能在一个位置上进行的线性表.其中,允许插入和删除的一端位于表的末端,叫做栈顶(top),不允许 ...