极客时间-左耳听风-程序员攻略-Linux系统、内存和网络
程序员练级攻略:Linux系统、内存和网络
Linux 系统相关
- Red Hat Enterprise Linux 文档 。
- Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 Linux 内核是怎样启动、初始化以及进行管理的。
- LWN’s kernel page ,上面有很多非常不错的文章来解释 Linux 内核的一些东西。
- Learn Linux Kernel from Android Perspective ,从 Android 的角度来学习 Linux 内核,这个站点上的 Blog 相对于前面的比较简单易读一些。
- Linux Kernel Doc
- Kernel Planet ,Linux 内核开发者的 Blog,有很多很不错的文章和想法。
- Linux Performance and Tuning Guidelines ,这是 IBM 出的红皮书,虽然有点老了,但还是非常值得一读的。
- TLK: The Linux Kernel ,这是一本相对比较老的书了,Linux 内核版本为 2.0.33,但了解一下前人的思路,也是很有帮助的。
- Linux Performance ,这个网站上提供了和 Linux 系统性能相关的各种工具和文章收集,非常不错。
- Optimizing web servers for high throughput and low latency ,这是一篇非常底层的系统调优的文章,来自 DropBox,从中你可以学到很多底层的性能调优的经验和知识。
内存相关
LWN.net 上有一系列的 “What every programmer should know about memory” ,完整的 PDF 文档。
下面是这个系列文章的网页版列表,内存知识体系。
- Part 1: Introduction ,中译版为 “每个程序员都应该了解的内存知识【第一部分】”
- Part 2: CPU caches
- Part 3 (Virtual memory)
- Part 4 (NUMA systems)
- Part 5 (What programmers can do - cache optimization)
- Part 6 (What programmers can do - multi-threaded optimizations)
- Part 7 (Memory performance tools)
- Part 8 (Future technologies)
- Part 9 (Appendices and bibliography)
和内存相关的论文,做一些程序的性能优化方面。
- Memory Barriers: a Hardware View for Software Hackers。内存的读写屏障是线程并发访问共享的内存数据时,从程序本身、编译器到 CPU 都必须遵循的一个规范。有了这个规范,才能保证访问共享的内存数据时,一个线程对该数据的更新能被另一个线程以正确的顺序感知到。在 SMP(对称多处理)这种类型的多处理器系统(包括多核系统)上,这种读写屏障还包含了复杂的缓存一致性策略。这篇文章做了详细解释。
- A Tutorial Introduction to the ARM and POWER Relaxed Memory Models,对 ARM 和 POWER 的宽松内存模型的一个教程式的简介。本篇文章的焦点是 ARM 和 POWER 体系结构下多处理器系统内存并发访问一致性的设计思路和使用方法。与支持较强的 TSO 模型的 x86 体系结构不同,ARM 和 POWER 这两种体系结构出于对功耗和性能的考虑,使用了一种更为宽松的内存模型。本文详细讨论了 ARM 和 POWER 的模型。
- x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors,介绍 x86 的多处理器内存并发访问的一致性模型 TSO。
内存管理方面的 lib 库。目前而言,BSD 的 jemalloc 有很大的影响力。
- ptmalloc 是 glibc 的内存分配管理。
- tcmalloc 是 Google 的内存分配管理模块,全称是 Thread-Caching malloc,基本上来说比 glibc 的 ptmalloc 快两倍以上。
- jemalloc 是 BSD 提供的内存分配管理。其论文为 A Scalable Concurrent malloc(3) Implementation for FreeBSD,这是一个可以并行处理的内存分配管理器。
关于 C 的这些内存分配器,可以参看 Wikipedia 的 “C Dynamic Memory Allocation”这个词条。
下面是几篇不错的文章,感觉一下上面那三种内存分配器的一些比较和工程实践。
- ptmalloc,tcmalloc 和 jemalloc 内存分配策略研究
- 内存优化总结:ptmalloc、tcmalloc 和 jemalloc
- Scalable memory allocation using jemalloc
- Decreasing RAM Usage by 40% Using jemalloc with Python & Celery
计算机网络
网络学习
《计算机网络(第五版)》,这本中有很多细节。全书按照网络协议模型自下而上(物理层、数据链路层、介质访问控制层、网络层、传输层和应用层)有系统地介绍了计算机网络的基本原理,并结合 Internet 给出了大量的协议实例。
这本书还与时俱进地引入了最新的网络技术,包括无线网络、3G 蜂窝网络、RFID 与传感器网络、内容分发与 P2P 网络、流媒体传输与 IP 语音,以及延迟容忍网络等。另外,本书针对当前网络应用中日益突出的安全问题,用了一整章的篇幅对计算机网络的安全性进行了深入讨论,而且把相关内容与最新网络技术结合起来阐述。这本书读起来并不枯燥,因为其中有很多小故事和小段子。
两个网上的教程和讲义也可以让人入门。
- 渥汰华大学的一个课程讲义你也可以一看 Computer Network Design 。
- GeeksforGeeks 上也有一个简单的 Computer Network Tutorials 。
网络调优
实用的可以操作的技术。
- 《Linux 的高级路由和流量控制 HowTo》(Linux Advanced Routing & Traffic Control HOWTO ),这是一个非常容易上手的关于 iproute2、流量整形和一点 netfilter 的指南。
- 关于网络调优,你可以看一下这个文档 Red Hat Enterprise Linux Network Performance Tuning Guide。
- 还有一些网络工具能够帮上你的大忙,这里有一个网络工具的 Awesome 列表 Awesome Pcap Tools ,其中罗列了各种网络工具,能够让你更从容地调试网络相关的程序。
- Making Linux TCP Fast ,一篇非常不错的 TCP 调优的论文。
- 下面是在 PackageCloud 上的两篇关于 Linux 网络栈相关的底层文章。
网络协议
读 RFC 有几个好处,一方面可以学习技术,另一方面,你可以通过 RFC 学习到一个好的技术文档是怎么写的,还能看到各种解决问题的方案和思路。
对于第 2 层链路层,需要了解一下 ARP:
以及 Tunnel 相关的协议:
- RFC 1853 - IP in IP Tunneling
- RFC 2784 - Generic Routing Encapsulation (GRE)
- RFC 2661 - Layer Two Tunneling Protocol “L2TP”
- RFC 2637 - Point-to-Point Tunneling Protocol (PPTP)
对于第 4 层,最需要了解的是 TCP/IP 。《TCP 的那些事儿(上)》和《TCP 的那些事儿(下)》两篇文章。
- RFC 793 - Transmission Control Protocol - 最初的 TCP 标准定义,但不包括 TCP 相关细节。
- RFC 813 - Window and Acknowledgement Strategy in TCP - TCP 窗口与确认策略,并讨论了在使用该机制时可能遇到的问题及解决方法。
- RFC 879 - The TCP Maximum Segment Size and Related Topics - 讨论 MSS 参数对控制 TCP 分组大小的重要性,以及该参数与 IP 分段大小的关系等。
- RFC 896 - Congestion Control in IP/TCP Internetworks - 讨论拥塞问题和 TCP 如何控制拥塞。
- RFC 2581 - TCP Congestion Control - 描述用于拥塞控制的四种机制:慢启动、拥塞防御、快重传和快恢复。后面这个 RFC 被 RFC 5681 所更新。还有 RFC 6582 - The NewReno Modification to TCP’s Fast Recovery Algorithm 中一个改进的快速恢复算法。
- RFC 2018 - TCP Selective Acknowledgment Options - TCP 的选择确认。
- RFC 2883 - An Extension to the Selective Acknowledgement (SACK) Option for TCP - 对于 RFC 2018 的改进。
- RFC 2988 - Computing TCP’s Retransmission Timer - 讨论与 TCP 重传计时器设置相关的话题,重传计时器控制报文在重传前应等待多长时间。也就是经典的 TCP Karn/Partridge 重传算法。
- RFC 6298 - Computing TCP’s Retransmission Timer - TCP Jacobson/Karels Algorithm 重传算法。
经典论文《Congestion Avoidance and Control》。
关于 Linux 下的 TCP 参数,TCP 的 man page 。
对于第 7 层协议,HTTP 协议是重点要学习的。
《HTTP 权威指南 》,这本书有点厚,可以当参考书来看。这本书中没有提到 HTTP/2 的事,但是可以让你了解到 HTTP 协议的绝大多数特性。
HTTP 1.1 的原始 RFC 是 1999 年 6 月的 RFC 2616,但其在 2014 后很快被下面这些 RFC 给取代了。
- RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
- RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
- RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
- RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests
- RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching
- RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication
关于HTTP/2,这是 HTTP 的一个比较新的协议,它于 2015 年被批准通过,现在基本上所有的主流浏览器都默认启用这个协议。所以,你有必要学习一下这个协议。下面是相关的学习资源。
- Gitbook - HTTP/2 详解
- http2 explained(中译版)
- HTTP/2 for a Faster Web
- Nginx HTTP/2 白皮书
- HTTP/2 的两个 RFC:
- RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2) ,HTTP/2 的协议本身
- RFC 7541 - HPACK: Header Compression for HTTP/2 ,HTTP/2 的压缩算法
Wikipedia 的 Internet Protocol Suite 上看看,这是一个很不错的网络协议的词条汇集地。
极客时间-左耳听风-程序员攻略-Linux系统、内存和网络的更多相关文章
- 极客时间-左耳听风-程序员攻略-UI/UX设计
程序员练级攻略:UI/UX设计 学习设计新手, 7 steps to become a UI/UX designer 学习设计的一些原则和套路,如配色.平衡.排版.一致性等. 用户体验的 4D 步骤- ...
- 极客时间-左耳听风-程序员攻略-异步I/O模型和Lock-Free编程
异步 I/O 模型 异步 I/O 模型其中的设计模式或是解决方法可以借鉴到分布式架构上来. 史蒂文斯(Stevens)在<UNIX 网络编程>一书 6.2 I/O Models 中介绍了五 ...
- 极客时间-左耳听风-程序员攻略-Java底层知识
Java 字节码相关 字节码编程,也就是动态修改或是动态生成 Java 字节码.Java 的字节码相当于汇编,其中的一些细节. Java Zone: Introduction to Java Byte ...
- 【ARTS】01_21_左耳听风-201900401~201900407
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_20_左耳听风-20190325~20190331
zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...
- 【ARTS】01_19_左耳听风-20190318~20190324
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_18_左耳听风-20190311~20190317
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_17_左耳听风-20190304~20190310
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_16_左耳听风-20190225~20190303
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
随机推荐
- PY3_线程红绿灯
# Author:jum_# event 事件监测 红灯停绿灯行 线程标志位# 事件主要提供了三个方法wait.clear.set# clear:将“Flag”设置为False#set:将“Flag” ...
- 网络流学习(转载自ssw 的博客)
众所周知,网络流是探究网络上运输的一种图论分支.但是大多数人在第一次接触这个题时都有些畏惧感(比如说我),大佬可以自信跳过.. 本文包括: 1.网络流的概念及基本性质 2.略谈 Edmonds-Kar ...
- MySQLorder by用法
首先,order by是用来写在where之后,给多个字段来排序的一个DQL查询语句. 其次,order by写法: 1. select 字段列表/* from 表名 where 条件 order ...
- Java定义三个点Object...
从Java 5开始,Java语言对方法参数支持一种新写法,叫 可变长度参数列表,其语法就是类型后跟...,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]. public ...
- python3 魔法方法
魔法方法是一些内置的函数,开头和结尾都是两个下划线,它们将在特定情况下(具体是哪种情况取决于方法的名称)被Python调用,而几乎不需要直接调. 1.__new__ 2.__init__ 3.__st ...
- Django基础(路由、视图、模板)
目录导航 Django 路由控制 Django 视图层 Django 模版层 Django 路由控制 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用 ...
- 快速理解js中的call,apply的作用
今天被人问到js中的call,apply的区别和用途,解释了一番后,想到之前在逼乎上看到一位小伙伴生动形象的解释 本身不难理解,看下MDN就知道了,但是不常用,遇到了,还要脑回路回转下.或者时间长了, ...
- Apache的安装与配置
apahe官网 http://www.apache.org/ 安装及配置https://blog.csdn.net/liyang4534/article/details/78036591 常见问题的处 ...
- golang-Beego-orm创建的坑
Orm使用sqlites不识别问题 Idc string `description:"机房"` 这个description sqlites的数据库不识别.解决方法 去掉descri ...
- SpringMVC生命周期,SpringMVC运行流流程
SpringMVC详细运行流程图 SpringMVC运行原理 1. 客户端请求提交到DispatcherServlet2. 由DispatcherServlet控制器查询一个或多个HandlerMap ...