自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 通信协议下的可靠UDP,KCP协议快在哪呢?

前言:Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768 描述了UDP。Internet 的传输层有两个主要协议,互为补充。无连接的是UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是TCP,该协议几乎做了所有的事情。一、简介KCP是一个快速可靠协议,能以比 .

2020-12-31 15:00:22 633 2

原创 一文让你彻底了解Linux中常用操作命令【建议新手收藏】

一、Linux 标准目录结构/:根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中/bin:/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。/boot:放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可/dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的

2020-12-30 16:05:33 269 1

原创 Linux下的工程管理——CMake学习指南,手把手教你入门【建议新手收藏】

一、CMake介绍CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make packag

2020-12-29 15:00:17 2610 10

原创 十年经验程序员,手把手教你使用Nginx搭建web集群【建议新手收藏】

一、集群介绍1、传统web访问模型(1)传统web访问模型完成一次请求的步骤1)用户发起请求2)服务器接受请求3)服务器处理请求(压力最大)4)服务器响应请求(2)传统模型缺点单点故障;单台服务器资源有限(客户端则是无限的);单台服务器处理耗时长(客户等待时间过长);(3)传统模型优化——单点故障解决方案优化方案一:部署一台备份服务器,宕机直接切换该方案可以有效解决服务器故障导致的单点故障,但且服务器利用率低、成本高,切换不及时,且无法解决服务器业务压力问题。优化方案二:

2020-12-28 16:01:45 1310 1

原创 浅谈高性能IO模型,如何理解四种IO模型呢?

服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型

2020-12-26 20:04:29 188

原创 年轻人还记得KCP吗?什么是KCP,怎么使用呢!!!

一、什么是KCPKCP是一种网络传输协议(A Fast and Reliable ARQ Protocol),可以视它为TCP的代替品,但是它运行于用户空间,它不管底层的发送与接收,只是个纯算法实现可靠传输,它的特点是牺牲带宽来降低延迟。因为TCP协议的大公无私,经常牺牲自己速度来减少网络拥塞,它是从大局上考虑的。而KCP是自私的,它只顾自己的传输效率,从不管整个网络的拥塞情况。举个例子,TCP检测到丢包的时候,首先想到的是网络拥塞了,要放慢自己的速度别让网络更糟,而KCP想到的赶紧重传别耽误事。TCP

2020-12-26 12:04:12 7262 1

原创 不会吧!年轻人你还不会安装Nginx,一步一步教你安装【建议新手收藏】

一、安装Nginx1、准备工作(1)打开虚拟机,使用远程连接工具连接 linux 操作系统(2)到 nginx 官网下载软件:http://nginx.org/2、开始进行 nginx 安装(1)安装 pcre 依赖第一步 联网下载 pcre 压缩文件依赖wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz第二步 解压压缩文件使用命令 tar –xvf pcre-8.37.tar.gz

2020-12-25 21:05:13 501 2

原创 深入Linux内核架构——进程管理实时调度【建议收藏】

前言:除了CFS调度器之外,还包括重要的实时调度器,有两种RR和FIFO调度策略。本章只是一个简单的介绍。一、抢占内核如果Linux内核不支持抢占,那么进程要么主动要求调度,如schedule()或者cond_resched();要么在系统调用、异常处理和中断处理完成返回用户空间前夕。在支持可抢占内核中,如果唤醒动作发生在系统调用或者异常处理上下文中,在下一次调用preempt_enable()是会检查是否需要抢占调度;中断处理返回前夕会检查是否要抢占当前进程,注意这里是中断返回而不是不支持抢占情况

2020-12-24 16:43:12 316

原创 薪资被倒挂?是提升技术,还是另寻他路【建议大家收藏】

不知道从啥时候开始,薪资倒挂这个词就开始火起来了。其实可以理解为一年比一年高的入行门槛以及愈发激烈的同行竞争。这也无可厚非,大量的互联网公司出现,市场上的程序员需求急剧上升,程序员获得了薪资市场的优势地位,薪资高也是公认的事实。如今的程序开发和10年前已经有了很大的不同。各种开源软件和开发工具,加上更多的入门资料、文档和技术博客,如果你愿意学习,可以在很快的时间内熟悉一项开发技能这使得很多不是计算机毕业的学生,也加入了程序员的行业。人多的结果就是企业提高门槛,校招生们努力提高实力。一来二去,可不就卷了

2020-12-24 16:00:47 1948 6

原创 Linux下的设计模式——责任链(结合Tomcat中Filter机制)

前言:先引入一个场景,假如规定学生请假小于或等于 2 天,班主任可以批准;小于或等于 7 天,系主任可以批准;小于或等于 10 天,院长可以批准;其他情况不予批准;以此为需求,写一个程序,你会怎么做?按着过程思维方式,最快最直白的就是,if else嘛,配合java,无非多追加学生类和各个角色的类。下面介绍的设计模式或许会给我们一些启发。一、责任链责任链又叫做职责链,是属于行为型设计模式,它的初衷是为了解决一个事件需要经过多个对象处理是很常见的场景。责任链的运作流程是将所有请求的处理者通过前一对象.

2020-12-23 17:06:47 244 1

原创 互联网大厂BATJ -T1~T9级别工程师分别需要具备哪些能力你知道吗?来看看你具备哪些能力?

前言:2020年秋招已经结束了,很多没拿到满意offer的同学已经在备战2021年春招了。腾讯在国内无论是知名度还是体量都是当之无愧的的巨无霸,本身也是很多朋友的目标,就跟清北之于高考生一样,先不说能不能考上,但没有考生是不向往的。而且鲁迅说过刚毕业的程序员能进BAT这等大厂是最好的,因为不论是技术体系、职业规划和发展前途都不是小公司能比拟的。只是该怎么进鲁迅没说,但是别急,今天我来带大家看看腾讯T1~T9各级别工程师需要具备哪些能力,同学们也可以对照自身所学看看自己在哪个级别,都为大家明年春招进.

2020-12-22 17:41:16 1148 1

原创 谈谈Linux进程管理是运行,进程有哪些状态?什么是进程的可中断等待状态?

一、进程进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些?TASK_RUNNING(可运行状态)TASK_INTERRUPTIBLE(可中断等待状态)TASK_UNINTERRUPTIBLE(不可中断等待状态)TASK_STOPPED(进程被其它进程设置为暂停状态)TASK_TRACED(进程被调试器设置为暂停状态)TASK_DEAD(退出状态)进程由于所需资源得不到满足,从而进入等待队列,但是该状态能够被信

2020-12-21 17:44:11 1512

原创 五个步骤教你理清Redis与Memcached的区别

一. 综述读一个软件的源码,首先要弄懂软件是用作干什么的,那memcached和redis是干啥的?众所周知,数据一般会放在数据库中,但是查询数据会相对比较慢,特别是用户很多时,频繁的查询,需要耗费大量的时间。怎么办呢?数据放在哪里查询快?那肯定是内存中。memcached和redis就是将数据存储在内存中,按照key-value的方式查询,可以大幅度提高效率。所以一般它们都用做缓存服务器,缓存常用的数据,需要查询的时候,直接从它们那儿获取,减少查询数据库的次数,提高查询效率。二. 服务方式memc

2020-12-21 15:35:28 201 1

原创 你们眼里的“奋斗逼”加班加点必会的多线程服务器常用编程模型(一)

一、进程与线程“进程/process”是操作里最重要的两个概念之一(另一个是文件),粗略地讲,一个进程是“内存中正在运行的程序”。本文的进程指的是 Linux 操作系统通过 fork() 系统调用产生的那个东西,或者 Windows 下 CreateProcess() 的产物,不是 Erlang 里的那种轻量级进程。每个进程有自己独立的地址空间 (address space),“在同一个进程”还是“不在同一个进程”是系统功能划分的重要决策点。Erlang 书把“进程”比喻为“人”,我觉得十分精当,为我

2020-12-20 18:55:27 194 1

原创 你们眼里的“奋斗逼”加班加点必会的多线程服务器常用编程模型(二)

一、进程间通信与线程间通信Linux 下进程间通信 (IPC) 的方式数不胜数,光 UNPv2 列出的就有:pipe、FIFO、POSIX 消息队列、共享内存、信号 (signals) 等等,更不必说 Sockets 了。同步原语 (synchronization primitives) 也很多,互斥器 (mutex)、条件变量 (condition variable)、读写锁 (reader-writer lock)、文件锁 (Record locking)、信号量 (Semaphore) 等等。如

2020-12-20 18:54:47 236 1

原创 一文让你掌握skynet,后端开发原来如此简单【建议收藏】

一、skynet是什么云风的skynet,定义为一个游戏服务器框架,用c + lua基于Actor模型实现。代码极其精简,c部分的代码只有三千行左右。整个skynet框架要解决的核心问题是:把一个消息(数据包)从一个服务(Actor)发送给另一个服务(Actor),并接收其返回。也就是在同一进程内(作者也强调并非只限于同一进程,因为可能会有集群间的通讯)的一个服务通过类似rpc之类的调用同一进程内的另外一个服务,并接收处理结果。而skynet就是处理这些服务间发送数据包的规则和正确性。skynet的核

2020-12-19 11:47:41 3730 3

原创 搞懂这篇文章,关于“线程”的对象池问题就信手拈来了【建议新手收藏】

前言:线程池是一个重要的概念。不过我发现,关于这个话题的讨论似乎还缺少了点什么。作为资料的补充,以及今后文章所需要的引用,我在这里再完整而又简单地谈一下有关线程池,还有.NET中各种线程池的基础。更详细的内容就不多作展开了,有机会我们再详细讨论这方面的细节。这次,还是一个“概述”性质的,希望可以说明白这方面问题的一些概念。一、线程池的作用其实“线程池”就是用来存放“线程”的对象池。在程序中,如果某个创建某种对象所需要的代价太高,同时这个对象又可以反复使用,那么我们往往就会准备一个容器,用来保存一批.

2020-12-19 10:46:47 262 3

原创 详细讲解C语言五大内存分区与可执行程序的三段(Text段、Date段、Bss段)【建议收藏】

一、c语言五大内存分区栈区(stack):存放函数形参和局部变量(auto类型),由编译器自动分配和释放。堆区(heap):该区由程序员申请后使用,需要手动释放否则会造成内存泄漏。如果程序员没有手动释放,那么程序结束时可能由OS回收。全局/静态存储区:存放全局变量和静态变量(包括静态全局变量与静态局部变量),初始化的全局变量和静态局部变量放在一块,未初始化的放在另一块。文字常量区:常量在统一运行被创建,常量区的内存是只读的,程序结束后由系统释放。程序代码区:存放程序的二进制代码,内存由系统管理

2020-12-18 14:49:57 3201 1

原创 让你详细了解虚拟化Docker(内含图形讲解),不看看后悔系列【建议收藏】

前言:Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈。既然是概览,所以不会涉及具体的技术细节。Docker自从发布以来发生了很多的变化,并且有些方面的变化还非常大。对于技术爱好者来说,我们喜欢酷毙新的功能,喜欢旧功能的改善。但对于生产环境中的使用者来说,其实不太喜欢这种频繁的变化!不管怎样,我们都有必要理清 docker 生态系统中的众多概念及它们之间的关系,以及 docker 自诞生至今(2018 年)的里程碑性事件。、一、百花齐放的容器技术.

2020-12-17 21:14:35 621

原创 图解让你了解常用锁的种类以及解决方案(内含代码演示)【建议新手收藏】

一、乐观锁和悲观锁(1)乐观锁小编相信,很多的技术人员首先接触到的就是乐观锁和悲观锁。小编记得那时候是在大学的时候接触到,当时是上数据库课程的时候。当时的应用场景主要是在更新数据的时候,当然多年工作之后,其实我们也知道了更新数据也是使用锁非常主要的场景之一。我们来回顾一下一般更新的步骤:检索出需要更新的数据,提供给操作人查看。操作人员更改需要修改的数值点击保存,更新数据这个流程看似简单,但是如果一旦多个线程同时操作的时候,就会发现其中隐藏的问题。我们具体看一下:A检索到数据;B检索到数

2020-12-17 15:01:41 1648 2

原创 一文让你了解MySQL面试中的问题事务是怎么解决的【内含代码演示】

一、面试的那些问题MySQL 的InnoDB与MyIsam的区别MySQL 如何与redis同步缓存MySQL 索引命中分析分库分表MySQL锁的原理为什么使用B+ 树,而不哈希索引B+树原理二、准备工作构建一个测试数据库,并且设计一个测试表,需要了解如下一些基本的工具use db;CREATE TABLE `user_with_innodb` ( `id` int(11) NOT NULL AUTO_INCREMENT C

2020-12-16 18:07:11 129 1

原创 解读I/O多路复用及其技术,让你彻底了解I/O多路复用(内含图形讲解)【建议新手收藏】

一、I/O多路复用简介高性能是每个程序员的追求,无论写一行代码还是做一个系统,都希望能够达到高性能的效果。高性能架构设计主要集中在两方面:尽量提升单服务器的性能,将单服务器的性能发挥到极致如果单服务器无法支撑性能,设计服务器集群方案​ 单服务器高性能的关键之一就是服务器采取的网络编程模型。服务器如何管理连接,如何处理请求等。这两个设计点最终都和操作系统的I/O模型及进程模型相关。I/O模型:阻塞、非阻塞、同步、异步进程模型:单进程、多进程、多线程我们所说的I/O模型是指网络I/O模型,

2020-12-16 15:41:34 886 1

原创 一文让你深刻理解异步请求池-DNS解析与实现

一、DNS概念简述DNS:Domain Name Service 域名解析服务,工作在应用层,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS监听在TCP和UDP端口53。FQDN:全称域名,如 www.example.comwww是主机名example.com是域名实现名称到IP解析的有三种方式:分散式解决方案:/etc/hosts,不易管理集中式解决方案:NIC,如果主机太多,对单一服务的压力太大分布式解决方案:DNS,解决

2020-12-14 12:31:25 1493

原创 搞懂这篇文章,关于池式组件Disruptor与内存池实现的问题小菜一碟

前言:已经不记得最早接触到 Disruptor 是什么时候了,只记得发现它的时候它是以具有闪电般的速度被介绍的。于是在脑子里,Disruptor和“闪电”一词关联了起来,然而却一直没有时间去探究一下。最近正在进行一项对性能有很高要求的产品项目的研究,自然想起了闪电般的Disruptor ,这必有它的用武之地,于是进行了一番探查,将成果和体会记录在案。一、什么是 Disruptor从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模.

2020-12-12 12:03:26 240 1

原创 后台开发技术得不到有效提升?试试这三个方法!

第一个方法:那如何有目标的去提升?那我先从十个知识点模块讲解一:精进基石专栏技术点:数据结构与算法的重要性的话不言而喻:新老结合:《数据结构与算法分析》+《啊哈!算法》链接:https://pan.baidu.com/s/1EHFdvfvR6C3t0nQn9Z8cQQ 密码:nrni二:高性能网络设计专栏技术点:三:基础组件实现专栏技术点:四:自研框架专栏技术点:五:中间件开发专栏技术点:电子书:《精通nginx》,《nginx开发从入门到精通》,《深入剖析nginx

2020-12-11 17:55:34 568

原创 一文让你彻底了解Redis(进阶),史上最全,不看后悔!!!【建议收藏】

一、Redis基础重新整理了一下,这篇笔记之前还有一篇基础相关的笔记:Redis基础:https://blog.csdn.net/m0_50662680/article/details/110948426二、为什么Redis是单线程的?官方回答:Redis是基于内存操作,CPU不是Redis的性能瓶颈,Redis的性能瓶颈是机器的内存大小、以及网络的带宽,既然单线程容易实现,那就直接使用单线程来实现了此外:使用单线程实现,那所有的命令就会排队执行,不需要考虑各种同步问题和加锁带来的性能消耗问题。

2020-12-11 17:00:11 2261 3

原创 一文让你彻底了解Redis基础,史上最全【建议新手收藏】

一、Redis简介redis简介(Remote dictionary Server 远程字典服务器):是完全开源免费的,由C语言编写的,一个高性能的(key/value)分布式内存数据库,基于内存运行, 并支持持久化的Nosql数据库,也被称为" 数据结构服务器 "。提前剧透、redis关于key-value的三大特点:redis是支持持久化的! 我们可以控制 数据 何时,用何种方式 保存到磁盘中,每次重启再次加载该文件,可以完成数据恢复redis不单单支持简单的key-value数据类型,同时

2020-12-10 11:23:17 2911 11

原创 10W+简历,录取却不到1%,腾讯的Offer都给了哪种程序员?

前言:进大厂,对于绝大多数程序员来说,都是在整个职业生涯中想要拥有的一段旅程。而现实是:大厂的高门槛,将很多人拒之门外。一年上10W+的简历,录取率却不到1%,那腾讯的offer都给了哪种程序员?1.名校毕业高材生、技术基础扎实随着互联网公司体制的不断完善,学历对于大厂而言也是一个不断拔高的过程。好的学历会成为你挺进大厂的一大助力。2.工作多年,且有一定技术建树作为程序员,技术水平往往是你的第一核心竞争力。没有技术,十年经验对于这个行业来说也如同镜中花、水中月。3.个人技术能力强,拥有很好的技术学

2020-12-08 21:41:13 2464 8

原创 Linux下的进程间通信:套接字(unix域协议)和信号【建议收藏】

一、管道1、管道是Linux支持的最初Unix IPC形式之一,具有以下特点:(1)管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;(2)只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);(3)单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。(4)数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区

2020-12-08 20:51:20 532

原创 数据架构与算法-布隆过滤器(Bloom Filter)详解—基于多hash的概率查找思想

前言:布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例False negatives,如果某个元素确实没.

2020-12-08 20:25:15 569

原创 好消息!10年经验程序员,告诉WebSocket与消息推送的关系(建议新手收藏)

前言:B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但不容易直接完成实时的消息推送功能,如聊天室、后台信息提示、实时更新数据等功能,但通过polling、Longpolling、长连接、Flash Socket以及HTML5中定义的WebSocket能完成该功能需要。一、Socket简介Socket又称"套接字",应用程序通常通过"套接字"向网.

2020-12-08 10:55:11 415 1

原创 10年经验程序员,手把手教你WebRTC开源项目从0到1搭建AppRTC(建议新手收藏)

前言:手把手教你搭建AppRTC(搭建环境ubuntu 16.04server版本)一、服务器组成AppRTC 房间+Web服务器 https://github.com/webrtc/apprtcCollider 信令服务器,在AppRTC源码里CoTurn coturn打洞+中继服务器Nginx 服务器,用于Web访问代理和Websocket代理。AppRTC组成图如下所示:AppRTC 房间+Web服务器使用python+js语言AppRTC Collider信令服务器采用g.

2020-12-07 17:25:23 918 1

原创 月薪8k和月薪38K的程序员差距在哪里?学习Linux C/C++ 这些你就知道了

前言:Linux C/C++ 从零基础到大神的学习路线,自己的真实学习路线,干货很多,建议收藏,认真阅读。在校期间,我一直走的都是 Linux C/C++ 学习路线,历经暑期实习、秋招决战、校招期间投的大部分岗位都是 Linux C/C++ 后台方向,对于这个方向,有着自己的理解。从接触 C++ 到我现在正式工作,大概有 2 年多的时间,对于这个方向的学习路线、以及学习编程的方法摸索出来了一些,看完本文,希望对于正在走 Linux C/C++ 路上的同学能有所帮助。一、校招 Linux C/C++.

2020-12-05 21:21:19 315

原创 深入了解Linux共享内存及函数详解(含编程示例)

一、共享内存的概念共享内存是指多个进程可以把一段内存共同的内存映射到自己的进程空间中,从而实现数据的共享和传输,它是存在与内核级别的一种资源,是所有进程间通信中方式最快的一种。在shell环境下可以使用ipcs查看当前系统IPC中的状态,例如当前的电脑中:$ ipcs------ Message Queues --------key msqid owner perms used-bytes messages------ Shared Memor

2020-12-05 14:42:58 410 1

原创 年轻人想详细了解做了十年Linux跟做了十年Windows的程序员差距有多大吗?听我慢慢道来!

前言:如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大。我写这篇文章并不是想贬低windows下面开发的人,做windows开发的人看了可能会感觉不舒服,我并不是这个意思,我只是说说我自己的感受。我最早开始学习编程也是在windows下面的, 学的是VB,后来转到VC++,当时用的是VC6.0, 做windows下面的开发5年后转入linux下面做开发的,开始在li.

2020-12-04 15:55:31 193 1

原创 年轻人会用C++实现一种协程吗?

前言:在前几天接触到了协程的概念,觉得很有趣。因为我可以使用一个线程来实现一个类似多线程的程序,如果使用协程来替代线程,就可以省去很多原子操作和内存栅栏的麻烦,大大减少与线程同步相关的系统调用。因为我只有一个线程,而且协程之间的切换是可以由函数自己决定的。一、介绍我有见过几种协程的实现,因为没有 C/C++ 的原生支持,所以多数的库使用了汇编代码,还有些库利用了 C 语言的 setjmp 和 longjmp 但是要求函数里面使用 static local 的变量来保存协程内部的数据。我讨厌写汇编和.

2020-12-03 20:14:22 1163 1

原创 浅谈互斥锁与进程间的通信(举例说明)

一、互斥锁进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理。注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行的修改,没错,速度是慢了,牺牲了速度而保证了数据安全。1.上厕所的小例子:你上厕所的时候肯定得锁门吧,有人来了看见门锁着,就会在外面等着,等你吧门开开出来的时候,下一个人才去上厕所。from multiprocessing import Process,Lockimport osimport time

2020-12-02 16:27:32 649 1

原创 深入了解进程间通信:System V信号量+共享内存

writer:#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <sys/shm.h>#include <errno.h>#define ..

2020-12-02 16:18:42 990 1

原创 深入了解Golang网络库中socket阻塞调度源码

前言:本文分析了Golang的socket文件描述符和goroutine阻塞调度的原理。代码中大部分是Go代码,小部分是汇编代码。完整理解本文需要Go语言知识,并且用Golang写过网络程序,更重要的是,需要提前理解goroutine的调度原理。一、TCP的连接对象连接对象:在net.go中有一个名为Conn的接口,提供了对于连接的读写和其他操作type Conn interface { Read(b []byte) (n int, err error) Write(b []b.

2020-12-01 14:20:31 1913 1

千万字肝翻Linux内核源码,对底层原理深耕深分析,从入门到入狱

内存屏障、内存映射、同步机制、GDB基本功能、CPU缓存、内核启动流程、 syncookie、读写分析、NFS实现框架、网络新特性、skb核心操作、HASH算法、过滤框架Nftables、接 收框架、页缓存PageCache、Netfilter框架、处理器架构、中断机制、malloc、free实现原理、内存的 动态、缺页中断、Kfifo环形缓冲区、开发工具ARM-LInux-gcc安装、网络协议栈、构建嵌入式Lnux系 统、内存性能优化、核心知识CPU、内核编译、UDP收包率、反向映射机制、MMu-gather操作、进程 描述符、虚拟内存机制、RCU机制、ARM架构、高速缓存、页面回收、数据同步、回写机制、页交换、 软硬中断区别、等待队列、字符设备驱动、系统调用、内存碎片。

2023-01-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除