1. 一行式并行方案(译)

    原文:Parallelism in one line

    译者:youngsterxyf

    在并行处理能力方面,Python的声名并不太好。不考虑关于线程和GIL(多数情况下是合理的)的标准论据,我认为Python中关于并行的真正问题并不是一个技术问题,而是教学问题。围绕Python线程和多进程的常见教程,一般都写得不错,但也令人乏味 - 激烈非凡,对日常真正有用的东西却很少涉及。

    沿袭的例子

    在DuckDuckGo(DDG)中搜索“Python多线程教程”,简单调查一下排在前面的结果,就会发现它们给出的都是同样基于Class + Queue的示例。

    介绍threading/multiprocessing、生产者/消费者的真实示例代码:

    # coding: utf-8
    # Example.py
    '''
    标准的多线程生产者/消费者模式
    '''
    
    import time 
    import threading 
    import Queue 
    
    class Consumer(threading.Thread): 
      def __init__(self …
    Tagged as : PHP 翻译 并行
  2. 那些Python党踩过的PHP坑

    一看题目貌似本文要准备吐槽PHP,但遇到“坑”主要是因为个人经验不足。

    JSON反序列化 json_decode

    函数 json_decode 默认反序列化的结果是对象。Python党在做PHP开发用到这个方法时,很可能会跳进这个坑,认为结果应该是个数组,因为Python中json.loads返回的是一个字典。 json_decode 的第二个参数 $assoc 可用来指定反序列化的结果为数组。

    文档:http://php.net/manual/zh/function.json-decode.php


    数组序列化

    Python党初学PHP,可能类比于Python的列表和字典,认为PHP中明确区分索引数组和关联数组。但:

    PHP 实际并不区分索引数组和关联数组,都是一种有序映射。

    虽然很多时候索引数组和关联数组在表现上是不一样的,比如对以下两个数组进行序列化:

    <?php
    $arrA = array('a', 'b', 'c');
    echo json_encode($arrA) . "\n";
    
    $arrB = array('a …
    Tagged as : PHP 笔记
  3. Go并发编程基础(译)

    原文:Fundamentals of concurrent programming

    译者:youngsterxyf

    本文是一篇并发编程方面的入门文章,以Go语言编写示例代码,内容涵盖:

    • 运行期并发线程(goroutines)
    • 基本的同步技术(管道和锁)
    • Go语言中基本的并发模式
    • 死锁和数据竞争
    • 并行计算

    在开始阅读本文之前,你应该知道如何编写简单的Go程序。如果你熟悉的是C/C++、Java或Python之类的语言,那么 Go语言之旅 能提供所有必要的背景知识。也许你还有兴趣读一读 为C++程序员准备的Go语言教程为Java程序员准备的Go语言教程

    1. 运行期线程

    Go允许使用go语句开启一个新的运行期线程,即 goroutine,以一个不同的、新创建的goroutine来执行一个函数。同一个程序中的所有goroutine共享同一个地址空间。

    Goroutine非常轻量,除了为之分配的栈空间,其所占用的内存空间微乎其微。并且其栈空间在开始时非常小,之后随着堆存储空间的按需分配或释放而变化。内部实现上,goroutine会在多个操作系统线程上多路复用。如果一个goroutine阻塞了一个操作系统线程 …

    Tagged as : 翻译 Golang
  4. Yii源码阅读笔记 - 自定义类自动加载

    前两天突然发现:之前的阅读笔记对于Yii应用中如何自动加载自定义类的问题没有解释。这里的自定义类是指非Yii框架本身的类。

    关于组件类的配置加载已在 Yii源码阅读笔记 - 组件集成 一文中做了较为详细的说明, 所以这里不再涉及。

    本文主要解释以下两点:

    1. Yii框架是如何找到请求对应的自定义控制器类?
    2. 在自定义控制器类中使用其他类(如Model类、或其他任意目录下文件中定义的类)时,Yii框架是如何自动加载的?

    Yii源码阅读笔记 - 应用模块化 一文中介绍类 CWebApplication 中的方法 createController , 该方法根据目标路由找到对应的控制器类文件并加载,方法中有行代码:

    $basePath=$owner->getControllerPath();
    

    这里的 getControllerPath 会返回当前应用或模块下的控制器类的存放目录,对应应用级与模块级,其实现有两处,其一是在类 CWebApplication 中:

    /**
     * @return string the directory that contains the controller classes. Defaults to 'protected/controllers'.
     */
    public function …
    Tagged as : PHP Yii 笔记 总结
  5. Slim源码阅读笔记

    以前读过 PHP - The Right Way 一文, 还翻译过其中的 The Baiscs 一节 (译文见 这里)。

    前两周读了 Modern PHP - New Features and Good Practices 一书 (读书笔记见这里), 甚是不错。

    这篇文档和这本书的作者都是Josh Lockhart, 他写了一个Web框架Slim,文档与书籍内容的精华都体现在这个框架中, 所以个人觉得这个框架值得一读。

    Slim的设计与实现都非常精简易懂,其对请求的主处理流程如下图所示:

    slim-process

    其中的核心概念包括:IoC容器、中间件、路由匹配等。

    IoC容器

    IoC,为Inversion of Control的缩写,中文翻译为“控制反转” - 是一种解决组件间依赖关系、配置和生命周期的设计模式,其最常见的实现方式为:依赖注入(DI)- 当系统 …

    Tagged as : PHP slim 笔记 总结
  6. Yii源码阅读笔记 - 日志组件

    使用

    Yii框架为开发者提供两个静态方法进行日志记录:

    Yii::log($message, $level, $category);
    Yii::trace($message, $category);
    

    两者的区别在于后者依赖于应用开启调试模式,即定义常量YII_DEBUG:

    defined('YII_DEBUG') or define('YII_DEBUG', true);
    

    Yii::log方法的调用需要指定message的level和category。category是格式为“xxx.yyy.zzz”的路径别名字符串,比如日志是在yii/framework/web/CController类中记录的,那么category为“system.web.CController”。level应为以下几种之一:

    • trace:Yii::trace方法即是使用的这个level。用于跟踪执行流
    • info:记录通用信息日志
    • profile:用于性能分析
    • warning:用于记录警告日志
    • error:用于记录重大错误日志

    要想日志真的输出到文件、邮件、web页面等地方 …

    Tagged as : PHP Yii 笔记 总结

Page 3 / 16