- 博客(32)
- 资源 (10)
- 收藏
- 关注
转载 go语言50坑
原文:50 Shades of Go: Traps, Gotchas, and Common Mistakes,翻译已获作者 kcqon 授权。 不久前发现在知乎这篇质量很高的文章,打算加上自己的理解翻译一遍。文章分为三部分:初级篇 1-34,中级篇 35-50,高级篇 51-57 前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大...
2019-12-27 10:47:41
840
原创 Linux的socket缓冲区
Linux的soket缓冲区每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。TCP协议独立于 write()/s...
2019-11-18 22:14:32
1533
原创 poll机制源码深入剖析
poll机制源码深入剖析文章目录poll机制源码深入剖析poll调用方法poll实现原理poll源码实现应用程序调用poll函数do_sys_poll复制用户区数据构建监听结构链表-->调用do_poll-->数据返回do_poll遍历链表对每个调用do_pollfd-->睡眠-->有事件或者超时-->返回do_pollfd找到文件结构-->调用文件驱动的po...
2019-11-16 17:57:03
552
1
原创 epoll机制源码分析
epoll机制源码分析文章目录epoll机制源码分析epoll 调用方法epoll实现原理源码分析关键结构思考题epoll 调用方法// 调用epoll_create建立一个epoll对象(在epoll文件系统中给这个句柄分配资源);//参数:监听的最大fd数目 返回值:epollfdint epoll_create(int size); //添加、删除、更改操作//参数:ep...
2019-11-16 17:55:41
377
原创 多线程锁的分析
多线程锁的分析首先我们知道锁主要有两种,悲观锁和乐观锁。对于悲观锁(mutex,spin_lock),它永远会假定最糟糕的情况,就像我们上面说到的互斥机制,每次我们都假定会有其他的线程和我们竞争资源,因此必须要先拿到锁,之后才放心的进行我们的操作,这就使得争夺锁成为了我们每次操作的第一步。乐观锁(CAS,原子操作)则不同,乐观锁假定在很多情况下,资源都不需要竞争,因此可以直接进行读写,但是如果碰...
2019-11-16 17:52:15
462
原创 单例模式c++实现
单例模式文章目录单例模式基本知识饿汉单例的实现版本一:双检查锁,由于内存读写的乱序导致不安全版本二:C++11的跨平台实现版本三:pthread_once函数实现版本四:C++11的最简洁跨平台实现用模板包装单例饿汉与懒汉的比较基本知识单例模式的学习在多次中遇到,包括但不限于:侯捷:明确拒绝编译器合成构造函数 muduo:Singleton类 flydragon:Config类 因此在这里...
2019-11-16 17:37:55
322
转载 多进程与多线程
https://blog.youkuaiyun.com/lishenglong666/article/details/8557215鱼还是熊掌:浅谈多进程多线程的选择关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有...
2019-08-30 19:55:16
366
原创 关于samb的使用
samba配置使用时的相关坑samba作为一种跨平台的共享文件传输协议,使用起来非常之爽。我用它在我的linux主机和windows主机之间来回切换。第一种情况,linux主机作为服务器,windows作为客户端这种情况下,需要根据网上的教程修改/etc/smb.conf这个配置文件,添加smb的访问用户和密码,设置他的访问权限。还要使得客户端可写,只要是writable=yes就可以。第...
2019-08-27 15:24:25
348
原创 muduo源码阅读(六)——日志库分析(二)
muduo日志库分析(二)上一篇文章,主要分析了LogStream{.h,.cc}、Logging{.h, .cc},这两部分主要是日志库的前端部分,具体可以看muduo日志库分析(一)在文章的最后,写出了日志库将buffer中的数据输出的函数是在Logging的析构函数中实现的,而输出的destination则是由 OutputFunc 来实现的,通过 Logger::setOutput 函...
2019-07-19 16:08:39
255
原创 muduo源码阅读(五):日志库分析(一)
muduo日志库分析(一)muduo的日志库由**LogStream{.h,.cc}、Logging{.h, .cc}、LogFile{.h, .cc}、AsyncLogging{.h, .cc}**组成。这里主要说明一下,这些文件(主要是文件里面对应的类)之间是怎么关联,并协同工作的。首先各个类之间的关系如图所示,是相互包含的。LogStream类里面有一个Buffer成员(一个模板类F...
2019-07-11 16:25:01
281
原创 TCP三次握手,四次挥手问题总结
TCP三次握手,四次挥手问题总结文章目录TCP三次握手,四次挥手问题总结TCP三次握手,四次挥手解释TCP协议基础TCP服务模型TCP头部状态转换为什么要“三次握手,四次挥手”三次握手四次挥手扩展可以了解的知识:TCP三次握手,四次挥手解释SYN 包:建立连接请求的包FIN 包:切断TCP 连接的包ACK 包:针对SYN 包和FIN 包的确认应答包1、TCP 的特点及其目的:(1)...
2019-06-25 20:49:25
1237
原创 muduo源码阅读(四):Buffer的设计
Buffer设计muduo的图示:buffer的必要性muduo的IO模型采用的是阻塞式的,因此线程只能阻塞在 seletc/poll/epoll_wait 当中,而不能阻塞的write/read函数中,这么一来,应用层的缓冲是必须的。每一个TCP socket都要配备一个input buffer和一个 output buffer。具体场景举例 outputbuffer的必要性目的:...
2019-06-24 21:11:10
254
转载 【转】代理服务器
小编在公司的技术分享中多次听到正向代理和反向代理,对于Ngnix这一实现反向代理的服务器,是如何工作的呢?下面咱们就一起了解一下。正文什么是代理服务器(Proxy Serve)? 提供代理服务的电脑系统或其它类型的网络终端,代替网络用户去取得网络信息。为什么使用代理服务器?提高访问速度 &n...
2019-06-16 21:35:36
547
原创 muduo源码阅读(三):TcpServer
Accptor server功能 :TcpServer负责管理Tcpconnction,而一个Tcpconnction则是代表了一次TCP连接。类图:从测试代码读起先上一段测试代码int main(){ printf("main(): pid = %d\n", getpid()); muduo::InetAddress listenAddr(9981); muduo::...
2019-06-16 21:32:08
433
原创 muduo源码学习(二):定时器
TimerQueue定时器在Reactor的基础之上,muduo又添加了定时器的功能。有了定时器,我们就可以将内部定时器事件或者编程者在程序中给定的一定时刻需要执行的任务,就是EVENTLOOP中的runAt run After runEvery等 与 外部的IO事件一起处理。muduo的定时器功能主要由三个class实现:Timerid Timer TimerQueue,编程...
2019-06-05 15:52:14
649
原创 muduo源码学习(一):Reactor模式与muduo
Reactor模式reactor模式一共有5种角色构成:Handle(句柄或者描述符) : 本质上是一种资源,由操作系统提供。因为再windows中我们叫句柄handle,在linux中我们可以认为就是描述符。作为一个事件代号。举例说,网络编程中的socket描述符。事件既可以来自于外部(如:客户端的连接请求,客户端的发送的数据可读事件),也可以来自于内部(操作系统产生的定时器事件等)。它本...
2019-06-04 22:50:02
210
转载 浅析 Linux 中的时间编程和实现原理
引子 我们都生活在时间中,但却无法去思考它。什么是时间呢?似乎这是一个永远也不能被回答的问题。然而作为一个程序员,在工作中,总有那么几次我必须思考什么是时间。比如,需要知道一段代码运行了多久;要在 l...
2019-06-03 21:20:53
707
原创 静态内存分配与动态内存分配
静态内存分配与动态内存分配动机平时看c/c++的书籍时,总会看到一种观点,说是C/C++语言使用的时候动态内存分配是最重要的,使用malloc等函数分配的内存必须要释放,否则及其容易出现内存泄露。但是自己有时候挺奇怪的,啥时候的内存要自己释放,啥时候的内存是编译器释放呢?内存模型这是csapp上面的linux进程内存分布图,从图中最下面往上看,只读段和读写段,在代码编译结束的时候就已经固...
2019-05-25 14:05:02
6373
1
原创 复合、委托(关联)、继承
面向对象的三种类关系面向对象的主要三种关系,分别是复合,委托,继承,这里的委托在某些地方可能叫联合之类的。本内容是根据侯捷的C++面向对象设计的视频总结的。复合composition在这个例子中,queue类中包含了deque类,并且开放了部分的deque的接口,这种一个类里面完整的包含了某个类的关系叫做复合。同时该种关系的类图也已经在图上呈现,是一个黑色实心的菱形。deque的生命周期也...
2019-05-25 00:01:42
828
转载 Linux中的线程局部存储(一)
本文转载自:http://blog.youkuaiyun.com/cywosp/article/details/26469435 在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这...
2019-05-24 10:23:20
112
转载 初级嵌入式软件工程师学习路线(在校本科或者硕士)
ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2)必须掌握一个嵌入式操作系统 (初步定 为uclinux或linux,版本待定) (3)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。从事嵌入式软件开发的缺点是: (1) ...
2019-04-15 15:40:33
40366
12
原创 linux内存管理(五)——伙伴系统
内核中很多时候要求分配连续页,而计算机经过长时间的运行以后,频繁的分配和释放内存,就会造成有很多内存虽然空闲可用,但是散布在物理地址空间的各处,这就是内存管理的碎片问题。为了能够快速检测内存中的连续区域,减缓碎片问题,linux内核采用了古老而历经考验的技术:伙伴系统。如图所示,第一幅图中有2的4次方的一块连续内存,此时,系统将其分为两块大小相等的2的3次...
2019-03-13 09:08:47
308
原创 linux内存管理(四)——地址转换
物理地址:CPU通过地址总线的寻址,找到真实的物理内存对应地址。就是真实的内存地址。逻辑地址:程序代码经过编译后出现在汇编程序中地址,算是进程当中用到的地址吧。线性地址(虚拟地址):就是上面的逻辑地址计算而来的地址,本质还是进程当中使用的虚拟地址。在32位CPU架构下,可以表示4G的地址空间,用16进制表示就是0x00000000---0Xffff ffff 。 ...
2019-03-12 16:20:06
634
原创 linux内存管理(三)——分页管理机制
前面已经说了,利用计算机的局部性原理,将内存细粒化,分成一个个4KB大小的页,然后与虚拟地址进行映射,这样可以每次先映射需要用到的和加载经常用到的内容。我们可以看到进程1和进程2的虚拟地址空间都被映射到了不连续的物理地址空间内(这个意义很大,如果有一天我们的连续物理地址空间不够,但是不连续的地址空间很多,如果没有这种技术,我们的程序就没有办法运行),甚至他们共用了一部分物理地址空间,这就是共享...
2019-03-11 18:17:26
225
原创 linux内存管理(二)——进程的内存分布
既然内存管理,是因为多进程的内存使用问题而引发的,那么我们也看看一个完整的进程独占的内存都有什么内容?在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中。这个沙盘就是虚拟地址空间(virtual address space),在32位模式下它总是一个4GB(虚拟地址)的内存地址块。但是每个进程地址会被分为用户空间和内核空间,所有进程的内核空间都被映射到同一块物理内存。 ...
2019-03-10 17:11:05
268
原创 Linux内存管理(一)
学习Linux系统内核机制时,其内存管理的机制是几个非常重要的模块之一。在学习内核设计的时候,我觉得应该抱着,如果是你来设计,应该怎么设计,需要考虑哪些问题,这样的角度去学习内核,否则你都不知道这个设计要解决什么问题,只是看书上说要这么这么设计,那么这样子将会是事倍功半,一知半解,知识点也是犹如一盘散沙的。首先,第一个要解决的问题就是什么是内存管理,为什么要内存管理? 当只有一个任务...
2019-03-09 13:31:12
148
原创 leetcode 员工的重要性
题目:给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结...
2019-01-12 16:23:00
343
转载 【转】漫谈linux文件IO
原文地址:http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO。本篇文件打算详细全面,深入浅出。剖析文件IO的细节。从多个角度探索如何提高IO性能。本文尽量用通俗易懂的视角去阐述。不copy内核代码。 阐述之前,要先有...
2018-11-27 23:57:19
156
原创 基于kalman的PMSM状态观测
0前言从此篇文章起,陆续会发几篇关于基于kalman的永磁同步电机状态观测,即无传感器控制的文章。在完成基础的矢量控制算法以后,自然也要进军无传感器控制,对电机的数学模型有进一步的认识,理解。这部分涉及的理论的东西比较多,工程师实现起来可能并不是很费劲,也不需要完全理解。但作为学生在学习时,还是渴望能够从头至尾理解透彻。连载的第一篇,首先会给大家建立状态观测器的概念,然后对整个使用kalm...
2018-11-07 14:16:53
2296
6
原创 矢量控制中的坐标变换
文章为本人原创,转载请注明出处! 0前言矢量控制当中,理论上比较困难的应该就是SVPWM和坐标变换两点,这次我就想把坐标变换再详细的说一说。首先会阐明坐标变换是什么以及为何常见形式是矩阵表示。然后抛开矩阵用复数推导电压方程,最后结合正在进行的课题提出问题检验理解程度。另外声明:本文适合已经学过矢量控制与坐标变换,但尚有存疑者。如...
2018-11-07 13:51:02
6599
1
哈工大现代控制理论--专业课出题老师上课课件.zip
2019-12-01
永磁同步电机扩展卡尔曼滤波器.rar
2019-12-01
leveldb代码注释.zip
2019-12-01
Model Predictive Control System Design and Implementation Using MATLAB
2018-06-16
实用电源电路集锦
2016-08-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人