前言

进程(Process),线程(Thread),协程(Coroutine,也叫轻量级线程)

进程进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”,它是CPU资源分配和调度的独立单位。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 进程的局限是创建、撤销和切换的开销比较大。

线程线程是在进程之后发展出来的概念。 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。一个进程可以包含多个线程。 线程的优点是减小了程序并发执行时的开销,提高了操作系统的并发性能,缺点是线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源,如果把进程比作一个车间,那么线程就好比是车间里面的工人。不过对于某些独占性资源存在锁机制,处理不当可能会产生“死锁”。

协程是一种用户态的轻量级线程,又称微线程,英文名Coroutine,协程的调度完全由用户控制。人们通常将协程和子程序(函数)比较着理解。 子程序调用总是一个入口,一次返回,一旦退出即完成了子程序的执行。

与传统的系统级线程和进程相比,协程的最大优势在于其"轻量级",可以轻松创建上百万个而不会导致系统资源衰竭,而线程和进程通常最多也不能超过1万的。这也是协程也叫轻量级线程的原因。

协程的特点在于是一个线程执行,与多线程相比,其优势体现在:协程的执行效率极高。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。

阅读全文 »

概述

Web工作方式

我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后会显示你想要浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢??

对于普通的上网过程,过程为:浏览器本身是一个客户端,当输入URL的时候,首先浏览器会去请求
DNS服务器。

通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接。

等浏览器发送完HTTPRequest(请求)包后,服务器接收到请求包开始处理请求包。服务器调用自身服
务,返回HTTPResponse(响应)包。

客户端收到来看服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。

一个Web服务器也被称为HTTP服务器,它通过HTTP协议与客户端通信。这个客户端通常指的是Web浏览器(包括手机上的各种客户端))

Web服务器的工作原理可以简单的归纳为:

  • 客户端通过TCP/IP协议建立到服务器的TCP连接
  • 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
  • 服务器向客户端发送HTTP协议应答包
  • 客户端与服务器断开连接,客户端解释HTML文档,在客户端屏幕上渲染图形结果
阅读全文 »

Map,Filter 和 Reduce

MapFilterReduce 三个函数能为函数式编程提供便利。

Map

Map会将一个函数映射到一个输入列表的所有元素上。这是它的规范:

规范

1
map(function_to_apply, list_of_inputs)
阅读全文 »

前言

之前的文章描述了蓝鲸开发框架的基础指南,以下将继续上文,讲述蓝鲸开发框架的进阶使用,包括登陆与用户对接、数据库配置、Django的配置修改,和中间件及公共方法。

阅读全文 »

蓝鲸 Python 开发框架简介

Python 开发框架是集成了蓝鲸系统功能,方便开发者可以快速在蓝鲸 PaaS 平台上开发 SaaS 的 Python 框架。

该开发框架基于 Django 框架架构,并在此基础上进行扩展,增加蓝鲸系统的特有功能,

例如:身份验证、ESB 调用及模板渲染等功能,以便开发者可以更专注于 SaaS 的逻辑开发。

阅读全文 »

Go语言之顺序编程

以下是笔者学习Go语言基础的代码随笔,本次练习内容为条件语句循环语句

Go 语言条件语句

Go 语言提供了以下几种条件判断语句:

语句 描述
if 语句 if 语句 由一个布尔表达式后紧跟一个或多个语句组成。
if…else 语句 if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。
if 嵌套语句 你可以在 ifelse if 语句中嵌入一个或多个 ifelse if 语句。
switch 语句 switch 语句用于基于不同条件执行不同动作。
select 语句 select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

注意:Go 没有三目运算符,所以不支持 ?: 形式的条件判断。

阅读全文 »

网络协议

从应用的角度出发,协议可以理解为"规则",是数据传输和数据解释的规则。

假设,A和B双方要传输文件,现规定:

  • 第一步,传输文件名,接收文接收到文件名,响应OK给传输方;
  • 第二步,发送文件的尺寸,接收方接收到该数据再次响应一个OK;
  • 第三步,传输文件内容,同前两步一样,接收方接收数据完成后响应OK表示文件内容接收成功。

由此,无论A和B之间传递何种文件,都是通过三次数据传输来完成。A和B之间形成了一个最简单的数据传输规则。

双方都按此规则发送和接收数据。A和B之间达成的这个相互遵守的规则即为协议。

这种仅在A和B之间被遵守的协议称之为原始协议。

当此协议被更多的人采用,不断的增加,改进,维护和完善,最终形成一个稳定,完整的文件传输协
议,被广泛应用于各种文件传输过程中。

该协议就成为一个标准协议。最早的FTP协议就是由此衍生而来的。

阅读全文 »

Go语言基础练习二

以下是笔者学习Go语言基础的代码随笔,延续了练习一中的数据类型、变量常量申明,以及Go 语言的几种运算符。

变量申明

第一种,指定变量类型,如果没有初始化,则变量默认为零值

1
2
var v_name v_type
v_name = value
阅读全文 »

Go语言基础练习一

以下是笔者学习Go语言基础的代码随笔,主要为数据类型与变量申明。

数据类型

在 Go 编程语言中,数据类型用于声明函数和变量。

Go 语言按类别有以下几种数据类型:

序号 类型和描述
1 布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
2 数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
3 字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
4 派生类型: 包括:(a) 指针类型(Pointer)(b) 数组类型© 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型
阅读全文 »

Django ORM

Django 模型使用自带的 ORM。

对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。

ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。

ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。

阅读全文 »