当使用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. 2.3 Oracle之DDL 语句(约束、伪列、视图、序列、同义词) 精简版

    DDL Data Definition(重点) (n. 定义:[物] 清晰度:解说)用于定义数据的结构,创建,修改,删除数据库对象 一.表的增删改查 1.创建表:CREATE TABLE temp A ...

  2. oracle数据库之rownum和rowid用法

    Rownum 和 Rowid是Oracle数据库所特有的,通过他们可以查询到指定行数范围内的数据记录.   以下通过例子讲解: -- 为了方便,首先,查找dept表中的所有. select deptn ...

  3. Apache 性能配置优化

    前言 最近在进行apache性能优化设置.在修改apache配置)文件之前需要备份原有的配置文件夹conf,这是网站架设的好习惯.以下的apache配置调优均是在red had的环境下进行的. htt ...

  4. Hadoop错误码速查

    经常遇到的exception是:PipeMapRed.waitOutputThreads(): subprocess failed with code N "OS error code 1: ...

  5. kafka handler

    1.配置kafka 参数文件 在ogg主目录下有示例文件: [root@WH0PRDBRP00AP0013 ogg]# cd AdapterExamples/big-data/kafka/ [root ...

  6. console.log() 替代函数

    var log = console.log.bind(console); log('d')

  7. Dao DaoImp

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  8. 第十二周作业_PSP总结报告

    回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...

  9. OO最后一次总结

    测试与正确性论证 Dijkstra说过:“程序测试只能证明程序有错,不能证明程序正确.”所谓程序测试,实际上是测试者特意挑出一批检查数据,通过运行程序,检查每个输入数据所对应的运行结果是否符合预期要求 ...

  10. Java面向对象程序设计

    北京电子科技学院(BESTI)                                                                                 实    ...