python aop

动态语言提供了在运行时改变程序结构的能力,有时候会提供巨大的方便

函数调用拦截是aop的基础

class Target:
    def targetFunc(self):
        print "targetFunction"

temp=Target.targetFunc

def foo(self):
    print "before call"
    temp(self)
    print "after call"

Target.targetFunc=foo

t=Target()
t.targetFunc()

对调用者来说根本就不知道函数已经给动了手脚

用Java, C++来实现就麻烦些了

发布于 | Tags python aop

remi源

epel & remi & ius

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
发布于 | Tags linux

tcp_tw_reuse、tcp_tw_recycle

tcp 使用场景,一般区分为“长连接”和“短连接”

如何解决tcp短连接的TIME_WAIT问题

短连接最大缺点:占用资源(如:本地端口、socket句柄)


正常的TCP client关闭后,进入TIME_WAIT,持续的时间一般在1~4分钟

每秒建1000个短连接(Web请求访问memcached)

假TIME_WAIT时间是1分钟,1分钟内需要建立6W个短连接,这些短连接1分钟内都处于TIME_WAIT状态,都不会释放

Linux默认本地端口范围:net.ipv4.ip_local_port_range = 32768 61000

不到3W,由于没有本地端口就不能建立了

发布于 | Tags network

为什么linux下epoll是最好,netty要比nio.2好

基本的 IO(包括网络和文件) 编程过程

  • 打开文件描述符(windows:handler,java:stream 或 channel)
  • 多路捕获 IO 可读写状态(Multiplexe:select/poll/epoll)
  • 对可读写的 FD 进行 IO 读写

IO 设备速度比CPU、内存慢,开多线程更好利用 CPU和内存,每个线程读写一个fd

C10K

海量网络连接下,瓶颈不在机器设备和网络速度,在于os和 IO 应用程序的沟通协作的方式

一万个 socket 连接过来,传统阻塞式 IO 编程模型要开一万个线程来应对

一万个线程要不断的关闭线程重建线程,资源都浪费在这上面了

一个线程耗 1M 内存,1 万个线程至少10G ,IA-32 机器架构基本不可能的(要开 PAE),x64 架构才有可能舒服点,这仅仅是粗略算的内存消耗,还有别的资源

高性能网络编程(即 IO 编程)

一,需要解耦 IO 连接和应用程序线程的对应关系,这就是非阻塞(nonblocking)、 异步(asynchronous)要求的由来

(构造一个线程池,epoll 监控到有数据的 fd,把 fd 传入线程池,由这些 worker thread 来读写 io)

二,需要高性能的 OS 对 IO 设备可读写(数据来了)的通知方式:

从 level-triggerednotification 到 edge-triggered notification

发布于 | Tags io netty

多重继承

继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能

Animal类层次设计

4 种动物:Dog(狗)、Bat(蝙蝠)、Parrot(鹦鹉)、Ostrich(鸵鸟)

哺乳动物鸟类归类,类层次:

1

能跑能飞 归类,类层次

2

要把上面的两种分类都包含进来,就得设计更多的层次

哺乳类:能跑的哺乳类,能飞的哺乳类

鸟类:能跑的鸟类,能飞的鸟类

这么一来,类的层次就复杂了:

3

如果要再增加 “宠物类” 和 “非宠物类”,这么搞下去,类数量指数增长(类爆炸)

发布于 | Tags lang pattern

并发之痛

并发 & 并行

  • 并发(concurrency)关注任务切分

创业公司开始只有一个人,一人分饰多角,一会做产品规划,一会写代码,一会见客户

虽然不能见客户的同时写代码,但通过分配时间片,切分了任务,,表现出来好像是多个任务一起在执行

  • 并行(parallelism)关注同时执行

发现自己太忙了,时间分配不过来,于是请了工程师,产品经理,市场总监,各司其职,这时候多个任务可以同时执行了

发布于 | Tags concurrent

程序员内部培训

程序员其实不需要培训,只需要指点

  • 工作都必须去实践,纯理论领域极少

  • 能找到互联网大量资源自学

  • 实践深入后遇到问题,除了靠智力解决外,大部分只需要知道答案的大致方位就能用时间来消灭掉

发布于 | Tags work