python编码和解码
Introduction
参考Pragmatic Unicode
UCS and CSIPerl,Python字符串处理: 关于perl, python多字节字符处理方式, 其中:
UCS(python): 不管读取的是哪一种编码的字节,程序统一设定为某一种特定编码
CSI(Perl): 读取的字节不需要转换,只是把一个字节串加上一个编码的属性
Five facts of life关于unicode的5点事实以及3个技巧:
Fact of life 1:All input and output of your program is bytes
Fact of life 2:The world needs more than 256 symbols to communicate text
Fact of life 3:Your program has to deal with both bytes and Unicode
Fact of life 4:A stream of bytes can’t tell you its encoding.
Fact of life 5:Enc ...
操作系统:守护进程, 进程会话介绍
站内链接:
操作系统环境-shell 分类介绍
操作系统环境-操作系统术语
操作系统环境-远程登录模式
操作系统内核-同步编程到异步编程的技术演进
操作系统内核-术语
操作系统内核-会话
1. 进程组和作业进程组注意区分进程组和用户组的区别, 关于用户以及用户组的命令可以见用户组信息的介绍, 这里主要讲述进程组的一些知识点, 以及后续进程组和会话, 作业的关系.
进程组: 进程组是一个或者多个进程的集合, 一般来说一个进程组就表示一个作业, 接收同一个终端的各类信号信息.
进程组长: 每个进程组都有一个进程组 ID, 每一个进程组都有一个组长, 在大部分系统中, 进程组 ID 一般就是组长进程 ID.
生存期: 进程组可以包含 1 个到 N 个进程, 只要还存在进程, 进程组就会一直存在. 从进程组创建到最后一个进程离开为止, 这个时间区间称为进程组的生存期.
12345678# 使用管道测试一个进程组, 可以看到tail和sleep属于同一个进程组tail -f tmp/unexec.txt | sleep 100 &ps -ej|head -1; ps -ej |g ...
unix功能:文件系统简要介绍
简介文件所有文件系统都需要进行存储和检索信息, 但是内存空间受非持久性, 虚拟地址空间最大容量限制,进程之间内存不共享等因素, 明显不能作为大型共享持久数据的存放地, 所以物理磁盘等物理存储介质产生.关于固态硬盘, IO 吞吐率等信息见The glossary of IO.那么, 如何存储, 读取这些物理存储介质上的信息呢?文件概念由此产生, 进程创建的逻辑信息单元, 一个磁盘会有成千上万文件, 每一个文件都是独立于其他文件的. 每一个文件都是一个独立的物理地址空间.那么, 如果对文件进行读取, 命名, 访问, 保护等操作呢?那就是”文件系统”应该做的事情.
知识框架关于文件系统的设计, 文件系统中的各类详细信息包含的内容实在太多, 我也不是非常了解, 这里主要对文件系统的基本常识以及各个 OS 的常用文件系统做一些简单的介绍.文件系统是一个分区或磁盘上的文件的逻辑集合, 其中每一个分区允许不同文件系统的逻辑来进行维护和管理. UNIX 中一切都被认定为文件, 包括物理设备等, 万物皆文件.关于分区命令, 见分区
根据引用的文章, 文件系统的整体知识框架(我也不是非常熟悉, 目前也没时 ...
终端历史, 网络终端, TTY介绍
站内链接:
远程登录模式
终端介绍
终端名词在详细讲述下面的知识点之前, 先简单了解下各个终端相关名词
CLI: 命令行, 图形界面普及之前使用最为广泛的用户界面, 用户通过键盘输入指令来告知计算机
Terminal: 一种用来让用户输入数据到计算, 并回显计算结果的机器, 一个 IO 交互设备
Console: 一种特殊的终端
Terminal Emulator: 终端模拟器, 利用程序模拟终端行为, 例如 iterm2
TTY: 终端的统称, Terminal 等价于 TTY 等价于文本输入,输出环境
Shell: 命令行解释器, 执行用户输入的命令并返回结果
哑终端和控制台最早期的大型机和小型机时代, 计算机是庞大的并安置在特殊的房间中, 此时通过某些设备与计算机进行交互, 这些设备就是最早期的终端.这些早期的终端一般使用电传打字机(Teletype)的设备来连接计算机, 从而确保每个用户都能通过终端登录并操作主机, 这是 UNIX 系统创建早期为了解决多用户登录而采取的一种较为廉价的方式. 因为当时计算机设备非常昂贵, 并且键盘和主机是集成在一起的, 没有独立的键盘, ...
Python线程和进程用法及相关知识点
站内链接:
同步编程到异步编程的技术演进
内核术语
锁分类介绍
python 多线程
python 协程
多进程基本知识点进程, 一个正在执行程序的实例, 是 OS 资源分配的最小单位. 根据<现代操作系统>的解释, 我们可以这样理解进程, CPU, 程序之间的关系(例子的整体逻辑:一个有好厨艺的计算机科学家正在为他的女儿做生日蛋糕):
CPU: 计算机科学家, 实现逻辑的真正主体
程序: 做蛋糕的食谱, 实现逻辑
输入数据: 做蛋糕的各种原材料
输出数据: 最终的生日蛋糕以及这过程中产生的任何半成品
进程: 厨师阅读食谱, 取来各种原材料, 以及进行烘焙的一系列动作的总和
一个进程就是某种类型的一个活动, 其有程序, 输入, 输出, 状态. 每一个进程都有一个虚拟的 CPU, 有用自己独立的虚拟地址空间. 那么 Python 中如何使用多进程呢?
python 语言不同于JAVA/C语言, 由于 GIL(Global interpreter Lock ,全局解释锁)的存在, 程序只能实现并发(Concurrency), 并不能实现并行(Parallelism). ...
淘宝千万级并发分布式架构图解
本网站相关文章:
同步编程到异步编程技术演进
淘宝技术架构
单机架构, 这是开发者最先接触的服务器架构:
动态服务器和数据库分离, 以避免资源竞争
本地缓存和分布式缓存, 降低服务器和数据库的压力, 使用memcached作为本地缓存, Redis作为分布式缓存.
反向代理, 实现负载均衡, 使用 nginx 实现负载均衡, 将请求均匀的分发到每一个 web 服务器上, 其中涉及 session 共享等问题
数据库读写分离, 以解决单机数据库的压力.
数据库业务分库, 将不同的业务保存到不同的数据库中, 降低业务之间的资源竞争, 当然跨业务之间的表关联还需要额外的措施.
数据库表分离, 解决单机写库性能瓶颈. 例如评论数据, 按照商品 ID 进行 HASH, 路由到对应表中存储, 评论数据都是独享的. 当然, 此做法实际上就是分布式数据库.
利用使用 LVS 或 F5 来使多个 Nginx 负载均衡. 从上面的几个服务器架构可以知晓, 不管如何分发, 所有的请求都必须通过第一台 nginx, 即使使用两层的 nginx 分发机制也一样. 所 ...
操作系统:同步编程到异步编程的技术演进
站内链接:
操作系统环境-shell 分类介绍
操作系统环境-操作系统术语
操作系统环境-远程登录模式
操作系统内核-同步编程到异步编程的技术演进
操作系统内核-术语
操作系统内核-会话
IO 相关术语
IO 模式介绍
内存相关知识点
淘宝千万级并发架构演进
并发和并行
内核相关术语
上下文基本定义
知识点MEM 和 CPU存储器山: 基于成本,效率的考虑, 计算机不同存储器以类似金字塔结构存储, 其中塔顶是速度最快, 成本最高, 容量极小的寄存器, 塔底则是成本低, 速度慢, 容量极大的广域网云存储.
从存储器山可以联想到以前学习操作系统原理中关于内存的两个局部性概念:
时间局部性: 相同的时间内, 程序访问同一个地址的次数越多, 时间局部性效果越好
空间局部性: 固定的访问次数内, 相邻访问顺序的存储器地址位置越近, 空间局部性越好
除了内存的存储器山概念, 还有一个 CPU 对于不同操作的时间观, 以便直观的感受 CPU 执行效率, 内存读取效率, 磁盘读取效率等.
上面的数据参考引用文章(见文章末尾), 其数据(数据来自微信公众号 驹说码事 ...
内核和系统:阻塞IO和非阻塞IO
本网站相关文章:
内核和系统(1)-cpu 术语和知识点
内核和系统(2)-cpu 架构体系
内核和系统(3)-IO 相关术语
内核和系统(4)-IO 模型
内核和系统(5)-磁盘分区
内核和系统(6)-缓存
内核和系统(7)-内存相关术语
内核和系统(8)-pstree 命令
阻塞 IO说明首先, 默认情况下, 大部分的系统调用都是阻塞 IO. 当发生 IO 中断的时候, 整个进程会被阻塞, 直到想要的数据获取到之后, 进程才会接触阻塞, 重新开始运行, 其流程如下:
这里recvfrom函数一旦调用就会阻塞等待客户端传递数据, 如果一直没有数据就会一直等待(理论上). 当然, 此类方法极大的降低了程序的执行效率, 在此模式下, 服务器只能通过增加进程或线程来提高对外服务的并发数量, 这会产生同步编程到异步编程技术演进中提及的 C10K 问题.
实例常见的阻塞 socket 服务器代码如下:
12345678910111213141516def main(): """ 监听指定的端口, 启动一个简单的socket监听服务器 "&qu ...
Python协程
本网站相关文章:
同步编程和异步编程
IO 模式介绍
python 多线程
python 协程
变化历史版本首先, 关于协程的优势已经在同步编程和异步编程中介绍过, 这里不再阐述. 那么, Python 中协程的演变是怎样的呢?
版本
详细说明
2.2
引入生成器作为一种语言特性,通过yield语句实现基础协程功能。
2.5
引入greenlet库,通过手动控制协程切换实现更灵活的协程编程。
3.2
引入yield from语法,简化协程编程的嵌套和异常处理。
3.3
引入asyncio库,提供异步编程的基础设施,包括协程、事件循环和异步 IO 操作。
3.4
引入async和await关键字,作为定义协程函数和在协程中进行异步操作的语法糖。
3.5
引入asyncio的async和await的原生语法支持。
3.6
引入asyncio的asyncio.run()函数,简化异步代码的入口点。
3.7
引入asyncio的asyncio.create_task()函数,简化任务的创建和管理。
3.8
引入asyncio的asyncio.ge ...
ssh-代理中使用https以及二级代理的介绍
本网站相关文章:
远程自动化工具
ssh 基本安装和配置
ssh 隧道转发功能以及应用
ssh 代理转发介绍及应用场景
ssh 代理中使用 https 以及二级代理的介绍
ssh 数字证书生成以及 https 原理介绍
ftp 安装,原理,配置
ssh 远程执行命令和 bash 工作模式
代理抓取 https 包原理用途在ssh-数字证书生成以及 https 原理介绍中数字证书的使用场景以及数字证书的各个文件的含义, https 如何使用数字证书达到安全认证的目的. 那么, 在使用代理的时候:
如何确保 https 认证能够成功的实现呢?
服务器如何被代理欺骗?
客户端如何被代理欺骗?
代理如何转发客户端和服务端的 https 加密请求?
这里我们先复习一下数字证书生成的各个文件的含义, 在下一节我们会一一解答这些问题. 以mitmproxy为例, 在运行mitmproxy之后, 会自动在$HOME/.mitmproxy/目录下生成多个文件, 让我们基于这个来讲解生成的各个证书文件含义, 注意结合ssh-数字证书生成以及 https 原理介绍:
123456789/Users/ ...