<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[迷途知返]]></title><description><![CDATA[谦虚]]></description><link>https://blog.youkuaiyun.com/openex</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; openex]]></copyright><item><title><![CDATA[对优快云十分失望，现决定废弃该空间]]></title><link>https://blog.youkuaiyun.com/openex/article/details/78670696</link><guid>https://blog.youkuaiyun.com/openex/article/details/78670696</guid><author>openex</author><pubDate>Thu, 30 Nov 2017 12:43:32 +0800</pubDate><description><![CDATA[Fault tolerance

我们期望服务能不受故障影响持续运行 
 可用性：在一些类型的故障发生时仍然可运行 
 强一致：从客户端角度看就像是一个单机服务]]></description><category></category></item><item><title><![CDATA[2017 6.824学习笔记 Lecture 2: RPC and threads]]></title><link>https://blog.youkuaiyun.com/openex/article/details/78574296</link><guid>https://blog.youkuaiyun.com/openex/article/details/78574296</guid><author>openex</author><pubDate>Sun, 19 Nov 2017 17:23:27 +0800</pubDate><description><![CDATA[线程
线程是非常有用的构建工具
再Go中线程称为goroutines，其他语言中叫做线程
他们通常比较棘手
为什么使用线程？
允许利用并发，这在分布式系统中很自然的体现出来
再I/O并发中，允许在等待一个IO响应时，处理下一个请求
多线程可以平行运行在多核上
Thread = “thread of execution”
线程允许一个程序在逻辑上一次执行许多事情
线程间有共享内存
每个线程包含自己的运]]></description><category></category></item><item><title><![CDATA[2017 6.824学习笔记 Lecture 1: Introduction]]></title><link>https://blog.youkuaiyun.com/openex/article/details/78332882</link><guid>https://blog.youkuaiyun.com/openex/article/details/78332882</guid><author>openex</author><pubDate>Sun, 12 Nov 2017 17:02:41 +0800</pubDate><description><![CDATA[什么是分布式系统？
多个计算机进行协作
大规模数据库，P2P文件共享，MR，DNS等等
许多重要的基础设施是分布式的
为什么要使用分布式？
连接物理隔离的实体
通过隔离取得安全性
通过副本机制容忍故障
可水平扩展资源提高生产力
实现中的困难？
许多并发问题
处理局部故障
难以实现理论性能
主题关于分布式程序背后的三大抽象方面：
存储
通信
计算
话题：实现RPC ，threads，concurren]]></description><category></category></item><item><title><![CDATA[go的内存模型]]></title><link>https://blog.youkuaiyun.com/openex/article/details/78276644</link><guid>https://blog.youkuaiyun.com/openex/article/details/78276644</guid><author>openex</author><pubDate>Wed, 18 Oct 2017 19:27:06 +0800</pubDate><description><![CDATA[关于channel
对一个channel的发送操作 happens before 相应channel的接收操作完成 （channel带缓存）
关闭一个channel happens-before 从该Channel接收到最后的返回值0
不带缓冲的channel的接收操作 happens-before 相应channel的发送操作完成 
go内存模型]]></description><category></category></item><item><title><![CDATA[APUE 进程环境]]></title><link>https://blog.youkuaiyun.com/openex/article/details/78129151</link><guid>https://blog.youkuaiyun.com/openex/article/details/78129151</guid><author>openex</author><pubDate>Thu, 28 Sep 2017 23:11:48 +0800</pubDate><description><![CDATA[本文使用golang的syscall和os


1.main函数

main是程序的入口，golang中也亦是如此 
启动一个程序时启动例程负责从内核获取命令行参数和环境变量，维护到程序的内存布局中（后文描述）

2.exit

//import os
func Exit(code int)

使程序主动退出，令退出码为指定值code，程序正常结束时返回码为0 (在一般的shell中使用$?获取)]]></description><category></category></item><item><title><![CDATA[实现了一个golang周期任务调度包]]></title><link>https://blog.youkuaiyun.com/openex/article/details/77933956</link><guid>https://blog.youkuaiyun.com/openex/article/details/77933956</guid><author>openex</author><pubDate>Mon, 11 Sep 2017 15:46:56 +0800</pubDate><description><![CDATA[drumstickImplement crond by Golang 
https://github.com/openex27/drumstick鼓槌(鸡腿)，golang定时任务包功能特性:
1.提供时间补偿机制，避免周期任务调度中时间损耗累计导致的长期使用后产生任务滞后现象
2.参数可传入自定义函数, 和变长自定义参数
3.未完待续…
方法：
NewTask(time.Duration, fun]]></description><category></category></item><item><title><![CDATA[使用Go实现了一个ping命令]]></title><link>https://blog.youkuaiyun.com/openex/article/details/77869414</link><guid>https://blog.youkuaiyun.com/openex/article/details/77869414</guid><author>openex</author><pubDate>Wed, 06 Sep 2017 17:48:17 +0800</pubDate><description><![CDATA[注意差错校验CheckSum在总字节为奇数时，需要将最后一个byte左移8位凑成16位
在操作binary时注意网络字节序问题 
github地址 https://github.com/openex27/Ping/blob/master/Ping.go
package mainimport (
    "bytes"
    "encoding/binary"
    "fmt"
    "net"]]></description><category></category></item><item><title><![CDATA[APUE 2 文件和目录]]></title><link>https://blog.youkuaiyun.com/openex/article/details/77650336</link><guid>https://blog.youkuaiyun.com/openex/article/details/77650336</guid><author>openex</author><pubDate>Thu, 31 Aug 2017 15:26:49 +0800</pubDate><description><![CDATA[本文代码实现采用golang的syscall包，其通常会包装一层系统调用不过大体相似
1.文件属性结构 Stat_t文件的类型
  文件类型
  描述  普通文件
  可能是文本或二进制
  目录文件
  包含该目录内的文件名，和有关这些文件信息的指针
  块特殊文件
  提供对设备带缓冲的访问
  字特殊文件
  提供对设备不带缓冲的访问，每次访问长度可变
  FIFO
  命名管道，用于进程间通]]></description><category></category></item><item><title><![CDATA[APUE 1 文件I/O]]></title><link>https://blog.youkuaiyun.com/openex/article/details/77480419</link><guid>https://blog.youkuaiyun.com/openex/article/details/77480419</guid><author>openex</author><pubDate>Tue, 22 Aug 2017 23:09:35 +0800</pubDate><description><![CDATA[本章讨论不带缓冲的I/O, 代码实现采用golang的syscall包，其通常会包装一层系统调用不过大体相似




1.文件描述符（FD）


文件描述符是一个非负的整数，内核通过该描述符对文件进行引用，进行与文件相关的操作
open、openat、creat函数会返回文件描述符
已打开文件在内核的数据结构如图 


进程表项：1.文件描述符标志 2.指向文件表项的指针
文件表项：1.文件状态标]]></description><category></category></item><item><title><![CDATA[golang 常量的iota使用]]></title><link>https://blog.youkuaiyun.com/openex/article/details/77478508</link><guid>https://blog.youkuaiyun.com/openex/article/details/77478508</guid><author>openex</author><pubDate>Tue, 22 Aug 2017 12:09:40 +0800</pubDate><description><![CDATA[在常量定义中,iota可以方便的迭代一个值从0以步长1递增，0,1,2,3,4,5… 
本例以文件大小的格式2的10次方进位一次为依据，将KB为1左移10位,MB左移20位。。。package mainimport (
    "fmt"
)type ByteSize float64const (
    _ = iota
    KB ByteSize = 1 << (10*iota)
    M]]></description><category></category></item><item><title><![CDATA[数理逻辑基础概念]]></title><link>https://blog.youkuaiyun.com/openex/article/details/75212939</link><guid>https://blog.youkuaiyun.com/openex/article/details/75212939</guid><author>openex</author><pubDate>Sun, 16 Jul 2017 23:01:14 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[离散数学基础-数理逻辑]]></title><link>https://blog.youkuaiyun.com/openex/article/details/72854391</link><guid>https://blog.youkuaiyun.com/openex/article/details/72854391</guid><author>openex</author><pubDate>Fri, 09 Jun 2017 13:01:29 +0800</pubDate><description><![CDATA[命题: 
    1.确定元素 
    2.是一个判断 
    3.陈述句]]></description><category></category></item><item><title><![CDATA[Python源码学习笔记 5 字典对象]]></title><link>https://blog.youkuaiyun.com/openex/article/details/70306677</link><guid>https://blog.youkuaiyun.com/openex/article/details/70306677</guid><author>openex</author><pubDate>Sun, 23 Apr 2017 23:27:23 +0800</pubDate><description><![CDATA[Python中对于字典的实现是根据key进行hash生成散列表，算法为“开放定址法”

1.PyDictEntry

字典中每一个kv对，实际上就是一个entry对象



[dictobject.h]
typedef struct {
    Py_ssize_t me_hash;      /* cached hash code of me_key */
    PyObject *me_ke]]></description><category></category></item><item><title><![CDATA[Python源码学习笔记 4 列表对象]]></title><link>https://blog.youkuaiyun.com/openex/article/details/70196246</link><guid>https://blog.youkuaiyun.com/openex/article/details/70196246</guid><author>openex</author><pubDate>Mon, 17 Apr 2017 20:47:37 +0800</pubDate><description><![CDATA[1.PyListObject

[listobject.h]
typedef struct {
    PyObject_VAR_HEAD //其中的obsize记录实际使用内存的对象数量
    PyObject **ob_item; //指向列表存储空间中第一个元素地址
    int allocated;  //一共分配的内存空间对象数量（含未使用），obsize
} PyListObjec]]></description><category></category></item><item><title><![CDATA[Python源码学习笔记 3 字符串对象]]></title><link>https://blog.youkuaiyun.com/openex/article/details/70149117</link><guid>https://blog.youkuaiyun.com/openex/article/details/70149117</guid><author>openex</author><pubDate>Thu, 13 Apr 2017 16:59:54 +0800</pubDate><description><![CDATA[1.PyStringObjecttypedef struct {
    PyObject_VAR_HEAD
    long ob_shash; //存储字符串hash值，初始为-1
    int ob_sstate; //表明该字符串是否经过intend处理
    char ob_sval[1];//实际存储字符串位置，默认为一个字符数组，但创建时会根据size大小扩展此空间
} PyStr]]></description><category></category></item><item><title><![CDATA[Python源码学习笔记 2 整数对象]]></title><link>https://blog.youkuaiyun.com/openex/article/details/70039517</link><guid>https://blog.youkuaiyun.com/openex/article/details/70039517</guid><author>openex</author><pubDate>Tue, 11 Apr 2017 00:13:30 +0800</pubDate><description><![CDATA[Python中的整数类型是不可变对象，为了提高python运行效率，内部实现了小整数对象池（数组实现），和普通整数缓冲池（单链表实现）。1.PyIntObject
  该结构仅适用2.5版本，该版本下数字长度大于long型时，对象类型会转变为PyLongObject，后续版本整合为PyIntObject，本篇文章仅讨论2.5版本
PyIntObject结构：[intobject.h]
typedef]]></description><category></category></item><item><title><![CDATA[Python源码学习笔记 1 简述python对象]]></title><link>https://blog.youkuaiyun.com/openex/article/details/69829200</link><guid>https://blog.youkuaiyun.com/openex/article/details/69829200</guid><author>openex</author><pubDate>Sun, 09 Apr 2017 22:02:54 +0800</pubDate><description><![CDATA[声明：本系列为本人阅读《python源码剖析》的读书笔记，如有侵权请及时告知本人openex@qq.com
1.PyObject在python中一切都是对象，而所有的对象都有相同的部分，便是PyObject 
通常情况下PyObject对象中存在两个成员：引用计数和对象类型[object.h]
typedef struct _object {
    PyObject_HEAD
} PyObject]]></description><category></category></item><item><title><![CDATA[linux系统调用笔记]]></title><link>https://blog.youkuaiyun.com/openex/article/details/60466483</link><guid>https://blog.youkuaiyun.com/openex/article/details/60466483</guid><author>openex</author><pubDate>Sun, 12 Mar 2017 23:46:59 +0800</pubDate><description><![CDATA[本笔记仅供个人学习所用，部分内容转自互联网，如有侵犯原创权益请及时联系本人
1.sendfile(int out_fd, int in_fd, off_t *offset, size_t count)
  解决在同一系统，两个文件描述符之间传递数据性能问题，去掉不比较的复制和上下文切换，完全在内核空间完成传递。in_fd需要为类似mmap的文件描述符（必须是真实的文件不能是管道或者socket）
o]]></description><category></category></item><item><title><![CDATA[python进阶-数据结构和算法]]></title><link>https://blog.youkuaiyun.com/openex/article/details/58598562</link><guid>https://blog.youkuaiyun.com/openex/article/details/58598562</guid><author>openex</author><pubDate>Thu, 02 Mar 2017 15:46:54 +0800</pubDate><description><![CDATA[本文内容整理自《Python Cookbook》，仅用作本人学习笔记，若侵犯原著权益请尽快联系本人。




1.将序列分解为单独变量


理解多重赋值
丢弃元素方法


data = ('Kevin', 50, 100, (2017, 2, 28))
name, shares, _, date = data

# _ 变量理解为忽略该位置元素

2.从任意长度的可迭代对象中分离元素


理解*a]]></description><category></category></item><item><title><![CDATA[python性能优化指南]]></title><link>https://blog.youkuaiyun.com/openex/article/details/55820550</link><guid>https://blog.youkuaiyun.com/openex/article/details/55820550</guid><author>openex</author><pubDate>Tue, 28 Feb 2017 17:06:30 +0800</pubDate><description><![CDATA[本文用以记录在python开发中遇到的性能提高技巧 
  持续更新中…




1.字符串

在python中string对象是不可变的，而字符串的相加会产生新的字符串。 
当需要迭代生成一个长字符串时逐一相加不仅会影响速度也会而外增加内存消耗（如中间结果，参考java StringBuffer）, 但是当仅需链接很少的字符串时join方法未必明智


join的恰当使用
“”%()
format]]></description><category></category></item></channel></rss>