Pike

Linux 操作系统原理 — 网络硬件卸载

你说的曾经没有我的故事 提交于 2020-05-05 15:52:13
目录 文章目录 目录 网络 Offload 交换 Offload 网络 Offload 网络 Offload,主要是指将原本在内核网络协议栈中进行的 IP 分片、TCP 分段、重组、checksum 校验等操作,转移到网卡硬件中进行,使得 CPU 的发包路径更短,消耗更低,从而提高处理性能。 一开始这些 Offload 功能都是在网卡上针对特定功能设计一个专门的电路并且带有很小的缓存,去做专门的事情。后来直接在网卡上部署一个可编程的通用的小型 CPU,一般称为 网络协处理器 ,就是现在的智能网卡。智能网卡的协处理器可以先对该数据包进行一些预处理,根据处理结果考虑是不是要把数据包发送给主机 CPU,智能网卡中的 Offload 功能一般是使用 eBPF 编程来实现的。 交换 Offload Linux 4.0 引入了 switchdev 框架,它代表对一类拥有 “交换” 能力芯片的多网口设备的抽象。其中每一个网口就是一个 Port,在 switchdev 框架中被注册成为一个 net_device。 switchdev 起源于 Open vSwitch 项目,由 Jiři Pirko 在 2014 年 9 月首次提出。在 2015 年 2 月的 Netdev 0.1 会议上,网络开发人员决定扩展并采用 switchdev 作为硬件交换机芯片的通用解决方案。switchdev

Go语言学习札记-Day01

烈酒焚心 提交于 2020-04-26 19:27:15
编程语言发展历程 一、B语言 Ken Thompson(肯.汤普森) 1969年 该语言得名于汤姆森的妻子Bonnie。 二、C语言 Dennis Ritchie(丹尼斯·里奇)。1969-1973年期间发明了C语言和Unix操作系统。 三、C++语言 Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)于1982年在C语言的基础上引入并扩充了面向对象的概念。 四、Python语言 Guido van Rossum(吉多.范.罗苏姆)在1989年,为了打发圣诞节假期,Guido开始写Python语言的编译/解释器。1994年发布1.0版本。1995年9月发布了Python3.5版。 五、Java语言 James Gosling(詹姆斯.高斯林)。1991年开发Oak,1994年更名为Java。1995年5月正式发布。 五、Go语言 Robert Griesemer, Rob Pike, Ken Thompson在2007年末由主持开发于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。 GO上手体验 安装过程移步:https://www.runoob.com/go/go-environment.html 一、项目结构 1.1 gopath目录 存储源代码。该目录下往往要有3个子目录:src,bin,pkg src ---- 里面每一个子目录,就是一个包

前端如何搞定数据结构与算法(先导篇)

╄→гoц情女王★ 提交于 2020-04-21 04:07:49
「 观感度:🌟🌟🌟🌟🌟 」 「 口味:锅包肉 」 「 烹饪时间:20min 」 本文已收录在 Github github.com/Geekhyt ,感谢Star。 为什么要学习数据结构与算法? 在0202年的今天,由于每天被无数的信息轰炸,大多数人已经变得越来越浮躁了,并且丧失了独立思考的能力。 你可能会经常听到这样的感慨: 技术人究竟能走多远?我遇到了天花板 35岁的程序员要如何面对中年危机? 技术更新太快,好累,学不动了 然后,你也变得焦虑起来。那你有没有静下心来想过,如何才能抵御年龄增长并且使自己增值呢? 无非是终身学习,持续修炼自己的内功。内功也就是基础知识和核心概念, 这些轰轰烈烈发展的技术本质,其实都是基础知识 ,也就是我们在大学里学过的基础课程。 操作系统 计算机组成原理 计算机网络 编译原理 设计模式 数据结构与算法 这也就是为什么越靠谱的面试官越注重你基础知识的掌握程度,为什么越牛的的企业越重视你的算法能力。因为当你拥有了这些,你已经比大多数人优秀了。你的天花板由你自己来决定,大家口中的中年危机可能并不会成为你的危机。新技术来临时,你对它的本质会看得更加透彻,学起来会一通百通。这样的人才,公司培养你也会花费更少的成本。 (不过,一辈子做个开开心心的 CRUD Boy 也是一种选择。) 数据结构与算法之间的关系 Rob Pike's 5 Rules of

学习Go语言

只谈情不闲聊 提交于 2020-03-12 11:44:44
Go语言 Go语言发展历史和趋势 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go是Google开发的,2007年开始,最开始是“20%时间”的产物(创新的力量),2009年9月发布。 Go语言相关产品: Docker Kubernetes(K8s) Caddy:Http服务器,可替代Nginx CockroachDB:可实现跨数据中心同步的可伸缩开源数据库。 国内哪些企业在用Go语言? 七牛云、华为云、360、淘宝、京东等。 语言特点与优势 编译语言、静态类型检查+动态语言、支持GC、适合服务器编程。 面向接口,而不是面向对象 没有继承和多态 没有泛型 没有try/catch 支持接口和函数式编程 CSP并发模型(goroutine+channel) 基础语法:变量、选择、循环、指针、数组、容器 面向接口:结构体,dock typing,组合 函数式编程:闭包 并发:goroutine,channel 简洁、快速、安全 并行、有趣、开源

并发和并行性有什么区别?

只谈情不闲聊 提交于 2019-12-14 16:28:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 并发和并行性有什么区别? 示例被赞赏。 #1楼 并发性:具有共享资源潜力的多个执行流 例如:两个线程争用一个I / O端口。 平行主义:将问题分成多个相似的块。 例如:通过在文件的每半部分上运行两个进程来解析大文件。 #2楼 并发 是指两个或多个任务可以在重叠的时间段内启动,运行和完成。 并不一定意味着它们都将同时运行。 例如,单核计算机上的 多任务处理 。 并行 是指任务 实际上 在多核处理器上同时运行。 引用 Sun的《 多线程编程指南》 : 并发:至少有两个线程在进行时存在的条件。 并行性的一种更通用的形式,可以包括时间切片作为虚拟并行性的一种形式。 并行性:当至少两个线程同时执行时出现的条件。 #3楼 他们解决了不同的问题。 并发解决了CPU资源不足和任务繁多的问题。 因此,您可以通过代码创建线程或独立的执行路径,以便在稀缺资源上共享时间。 直到最近,由于CPU的可用性,并发一直是讨论的主要内容。 并行解决了以下问题:找到足够多的任务和适当的任务(可以正确拆分的任务),然后将其分配给大量CPU资源。 并行性当然一直存在,但由于多核处理器非常便宜,因此它已经走在前列。 #4楼 我喜欢Rob Pike的演讲:并发不是并行(更好!) (幻灯片) (演讲) Rob通常会谈论Go