跑步近况-准备广州马拉松

最近这几周,具体是九月的一整月和十月初,都没怎么跑步。客观原因主要有两个:

  • 我换工作了
  • 我结婚了

关于跑步的好消息也有一个,那就是报名十二月份的广州马拉松,中签了。广马麻烦的地方有两个:
1. 需要抽签
2. 报名有资格要求:必须有以往参加过马拉松比赛的经历

第一个条件很正常, 很多有名气的马拉松都是要抽签的,因为人满为患嘛。第二个条件却引起骂声一片,因为涉及到鸡生蛋还是蛋生鸡的问题,很多广州本地人,就想在自己的城市参加第一次马拉松,却没有资格。

我们来拍拍肩吧,《百元之恋》观后感

《百元之恋》讲述了迷茫、堕落的一子,在经历各种屈辱、挫折之后,选择学习拳击的故事。

豆瓣对该电影的类型归纳为“剧情、喜剧、运动”,说是剧情和运动片无可厚非,但喜剧二字却让人啼笑皆非。电影前大半段都是弥漫着压抑、颓废甚至绝望的气氛,最后小半段转向奋进、激昂。跟喜剧八竿子打不着。

女性、拳击、失败,这些关键词不由让人们想到伊斯特伍德的《百万美元宝贝》,珠玉在前,其实这部电影想拍的出彩,还是挺难的。但看完电影之后,不得不说,它做到了。

那么,它吸引人的地方在哪里呢?我认为主要在于两个字,真实。

因为真实,所以能让观众产生很强的共鸣。

当一子在半夜骑着辆在路边顺来的自行车去超市时,我想到了,曾经有段时间我在床上一躺躺一整天,晚上饿的要晕了,晃晃悠悠爬起来去学校超市买东西吃。在昏黄的路灯下,没有什么比行尸走肉这个词更贴切了。

nginx proxy_cache与etag配合的问题

首先谈谈遇到的问题:

一个Nginx架在一个后端服务的前面,Nginx proxy_pass到它并开启proxy_cache,假设这个后端服务总是会吐Etag响应头。 在应用中,我们发现当nginx 的proxy_cache成功将后端的页面cache住时,浏览器多次对该页面发起请求,会命中nginx的cache,但即使浏览器请求带了If-None-Match请求头,nginx却不会响应304,而是响应200.
这样带来的问题是,即使nginx的cache将请求阻挡在后端应用之外,但是:
(1)命中后每次响应200导致我们nginx所在的服务器和客户浏览器双方都有流量损耗
(2)更重要的是增长了我们的服务响应时间。因为,如果是304的话,nginx不需要向浏览器吐数据,只用告诉浏览器用本地的缓存就好了。

Nginx中的进程间通信

我们知道,Linux提供了多种进程间传递消息的方式,比如共享内存、套接字、管道、消息队列、信号等,每种方式都各有特点,各有优缺点。其中Nginx主要使用了其中的三种方式:

  • 套接字(匿名套接字对)
  • 共享内存
  • 信号

本文主要结合代码讲一下前两种方式,匿名套接字对和共享内存在Nginx中的使用。

1. Nginx中的channel通信机制

1.1概述

首先简单的说一下Nginx中channel通信的机制。

Nginx中的channel通信,本质上是多个进程之间,利用匿名套接字(socketpair)对来进行通信。

我们知道,socketpair可以创建出一对套接字,在这两个套接字的任何一个上面进行写操作,在另一个套接字上就可以相应的进行读操作,而且这个管道是全双工的。

进程间传递文件描述符

首先,必须声明,“进程间传递文件描述符”这个说法是错误的。

在处理文件时,内核空间和用户空间使用的主要对象是不同的。对用户程序来说,一个文件由一个文件描述符标识。该描述符是一个整数,在所有有关文件的操作中用作标识文件的参数。文件描述符是在打开文件时由内核分配,只在一个进程内部有效。两个不同进程可以使用同样的文件描述符,但二者并不指向同一个文件。基于同一个描述符来共享文件是不可能的。
《深入理解Linux内核架构》

这里说的“进程间传递文件描述符”是指,A进程打开文件fileA,获得文件描述符为fdA,现在A进程要通过某种方法,根据fdA,使得另一个进程B,获得一个新的文件描述符fdB,这个fdB在进程B中的作用,跟fdA在进程A中的作用一样。即在fdB上的操作,即是对fileA的操作。