以下内容主要参考了廖雪峰老师的Python教程,在不懂的地方添加了自己的注释。

多进程

Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。

子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID。

Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程:

阅读全文 »

并发(Concurrency)与并行(Parallelism)

并发:两个或多个事件在同一时间间隔内发生。这些事情宏观上同时发生,微观上交替进行。

并行:两个或多个事件在同一时刻同时发生。

并发

假设你同时被赋予了唱歌和吃饭的任务。在给定的时间,你要么唱歌,要么吃东西,因为在这两种情况下,你的嘴都会受到影响。因此,为了做到这一点,你会吃一段时间,然后唱歌,重复这个过程,直到你的食物吃完或歌曲结束。所以你并发完成了任务。

阅读全文 »

u参数

有的时候在运行Python的时候,会遇到python -u xx.py,这是什么意思呢?

背景

python中标准错误(std.err)和标准输出(std.out)的输出规则:标准输出默认需要缓存后再输出到屏幕,而标准错误则直接打印到屏幕。如在test.py中有如下内容:

1
2
3
4
5
6
import sys

sys.stdout.write("Stdout1")
sys.stderr.write("Stderr1")
sys.stdout.write("Stdout2")
sys.stderr.write("Stderr2")
阅读全文 »

准备

在开始之前,我们需要进行一些准备工作:

  • 一台境外服务器,比如说腾讯云新加坡服务器
  • 安装有Nginx环境,centos可以用yum install nginx安装。
  • 一个域名,比如说www.xxxx.com,以及对应的ssl证书(腾讯云可以在这里申请免费的证书)

配置

执行vim /etc/nginx/nginx.conf,添加如下配置:

阅读全文 »

本文主要参考了Systemd 入门教程:命令篇

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。

守护进程定义

“守护进程”(daemon)就是一直在后台运行的进程(daemon)。比如说我们要开启一个服务node server.js,怎么才能让它变成系统的守护进程(daemon),成为一种服务(service),一直在那里运行,而不是退出终端就停止呢?有如下几种方法,更详细的介绍参考Linux 守护进程的启动方法

  1. 使用$ nohup node server.js &指令。
  2. 使用Screen 命令与 Tmux 命令。
阅读全文 »

一直对node.js与npm感觉很陌生,最近需要用到了,所以这里学习一下。以下文章主要参考了ConardLi的剖析 NPM 的包管理机制。因为本人纯小白,所以会添加一些其它的知识。

现如今,前端开发的同学已经离不开 npm 这个包管理工具,其优秀的包版本管理机制承载了整个繁荣发展的NodeJS社区,理解其内部机制非常有利于加深我们对模块开发的理解、各项前端工程化的配置以加快我们排查问题(相信不少同学收到过各种依赖问题的困扰)的速度。

本文从三个角度:package.json、版本管理、依赖安装结合具体实例对 npm 的包管理机制进行了详细分析。

剖析 package.json

阅读全文 »

在学习git的时候,感觉jingsam写的很不错,边学习边理解一下。强烈建立看原文,作者很牛掰。

Git对象

从根本上来讲,Git是一个内容寻址的文件系统,其次才是一个版本控制系统。记住这点,对于理解Git的内部原理及其重要。所谓“内容寻址的文件系统”,意思是根据文件内容的hash码来定位文件。这就意味着同样内容的文件,在这个文件系统中会指向同一个位置,不会重复存储。

Git对象包含三种:数据对象、树对象、提交对象。Git文件系统的设计思路与linux文件系统相似,即将文件的内容与文件的属性分开存储,文件内容以“装满字节的袋子”存储在文件系统中,文件名、所有者、权限等文件属性信息则另外开辟区域进行存储。在Git中,数据对象相当于文件内容,树对象相当于文件目录树,提交对象则是对文件系统的快照。

下面的章节,会分别对每种对象进行说明。开始说明之前,先初始化一个Git文件系统:

阅读全文 »

bash与shell区别

shell有多个含义:

  • Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
  • Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

bash(GNU Bourne-Again Shell)是最常用的一种shell,是当前大多数Linux发行版的默认Shell。除了bash外,其它的shell还有zsh、sh等。

sh的全名是Bourne Shell。名字中的玻恩就是这个Shell的作者。而bash的全名是Bourne Again Shell。最开始在Unix系统中流行的是sh,而bash作为sh的改进版本,提供了更加丰富的功能。一般来说,都推荐使用bash作为默认的Shell。

阅读全文 »

本文主要参考了阿泽作者的笔记,对于不理解的地方,我会添加个人注释。

XGBoost

XGBoost 是大规模并行 boosting tree 的工具,它是目前最快最好的开源 boosting tree 工具包,比常见的工具包快 10 倍以上。Xgboost 和 GBDT 两者都是 boosting 方法,除了工程实现、解决问题上的一些差异外,最大的不同就是目标函数的定义。故本文将从数学原理和工程实现上进行介绍,并在最后介绍下 Xgboost 的优点。

数学原理

目标函数

阅读全文 »

本文主要参考了阿泽作者的笔记,对于不理解的地方,我会添加个人注释。

集成学习

常见的集成学习框架有三种:Bagging,Boosting 和 Stacking。三种集成学习框架在基学习器的产生和综合结果的方式上会有些区别,我们先做些简单的介绍。

Bagging

Bagging 全称叫 Bootstrap aggregating( Bootstrap 抽样方法) ,每个基学习器都会对训练集进行有放回抽样得到子训练集,比较著名的采样法为 0.632 自助法。每个基学习器基于不同子训练集进行训练,并综合所有基学习器的预测值得到最终的预测结果。Bagging 常用的综合方法是投票法,票数最多的类别为预测类别。

阅读全文 »