自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hallå的博客

我可以选择放弃,但是不会放弃选择。

  • 博客(204)
  • 资源 (2)
  • 收藏
  • 关注

转载 VMware虚拟机网络模式之 Host-Only(仅主机模式)

三、Host-Only(仅主机模式)Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。其网络结构如下图所示:通过上图,我们可以发现,如果要使得虚拟机能联网,我们可以将主...

2019-12-13 15:04:12 833

转载 Vmware虚拟机网络模式之NAT模式

二、NAT(地址转换模式)刚刚我们说到,如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择。NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。其网络结构如下图所示:在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。那么我们会觉得很奇怪...

2019-12-13 15:02:25 281

转载 VMware虚拟机网络模式之桥接模式

vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那么这些都是有什么作用呢?其实,我们现在看到的VMnet0表示的是用于桥接模式下的虚拟交换机...

2019-12-13 15:01:13 302

原创 vmware+CentOS7安装KVM虚拟机详解

1.检测是否支持KVMKVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。注:如果是在vmware上跑的话,需要勾选虚拟化引擎:用以下命令查看是否支持:#cat /proc/cpui...

2019-10-05 18:52:35 1746

转载 python manage.py runserver 0.0.0.0:8000运行成功,但是浏览器无法访问Django服务

首先上截图:可以看到在windows cmd中执行python manage.py runserver 0.0.0.0:8000已经成功运行Django项目,但是在浏览器中输入127.0.0.1:8000却无法访问Django服务,这是为什么呢?我先是试了一下几种方法:1、关闭防火墙2、检查代理3、检查8000端口是否被占用经过测试,以上三种情况均不是造成无法访问的原因。最...

2019-09-26 16:39:12 10007 2

转载 虚拟机上dpdk报错只EAL: Error - exiting with code: 1 Cause: Cannot configure device: err=-22, port=0

dpdk l3fwd测试问题1:EAL: Error - exiting with code: 1 Cause: Cannot configure device: err=-22, port=0解决:如果使用的是e1000网卡出现这样的情况 仅需将e1000网卡换成支持多队列的网卡即可.1.关闭虚拟机2.打开虚拟机存储路径3.用文本编辑器(尽量不要用记事本)...

2019-09-15 13:49:00 2111

转载 DPDK-实战之skeleton(basicfwd)

0x01 缘由 继续学习DPDK示例,主要熟悉每个环节和设计理念,今天要学习的是一个相对简答的服务,仅仅从一个网口抓取数据包转发到另外一个网口,这样做双向转发,相当于桥的功能。其他基础业务都不做。0x02 直接上源码分析#include <stdint.h>#include <inttypes.h>#include <rte_eal.h&gt...

2019-09-15 10:50:59 690

原创 DPDK-实战之helloworld

这个是最简单的使用dpdk开发套件的例程。源码分析:#include <stdio.h>#include <string.h>#include <stdint.h>#include <errno.h>#include <sys/queue.h>//以上头开发环境glibc的相关头文件#include <...

2019-09-14 15:56:18 1494

转载 dpdk中文-DPDK学习路线图

接触DPDK也有快一年的时间了;因为项目中需要使用,所以一直在操练;讲说说一般DPDK的学习路线图;因为DPDK至今也没有一本靠谱的教程,所以决定亲自下手;其实学完前面4个部分呢,基本上就算是入门DPDK了,应该至少看着别人的代码可以修改的程度了;后续我也将以这个为路线图,出系类博客教程,目标不求通过看我的博客成为大神,但可以轻松入门...

2019-09-14 11:19:33 393

转载 绝对干货!初学者也能看懂的DPDK解析

一、网络IO的处境和趋势从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10GE/25GE/40GE/100GE的演变,从中可以得出单机的网络IO能力必须跟上时代的发展。1.传统的电信领域IP层及以下,例如路由器、交换机、防火墙、基站等设备都是采用硬件解决方案。基于专用网络处理器(NP),有基于FPGA,更有基于ASIC的。但是基于硬件的劣势非常明显,发生Bu...

2019-09-14 10:31:08 549

原创 虚拟机上centos7下安装DPDK(通过dpdk-setup.sh安装)

安装dpdk有两种方式:第一种命令;第二种使用dpdk-setup.sh。本文讲解通过dpdk-setup.sh来安装。1.下载dpdk进入dpdk官网,下载想要的版本:http://core.dpdk.org/download/2.安装依赖的库yum install -y kernel-devel kernel-headersyum install kernel.x86_6...

2019-09-13 17:36:54 15207 1

转载 Linux C++ 程序占cpu%问题排查

inux C++ 程序占cpu%问题排查缘起对一个服务(room_status_server)进行了一些优化,并顺便修改了部分配置文件,重启后用top命令观察,发现该程序cpu几乎占到了100%。初步判断发现这个问题后,想到前两天还上线了该服务,立马去线上看了看,还好线上是正常的。那么问题肯定是刚才的修改导致的!把线上的版本拿过来运行,还是cpu几乎占到了100%,那很大可能是配...

2019-09-04 11:13:33 906

转载 GDB多线程多进程调试

gdb多线程调试gdb提供的多线程调试工具新线程创建自动提醒 thread thread-id实现不同线程之间的切换 info threads查询存在的线程 thread apply [thread-id-list] [all] args在一系列线程上执行命令 线程中设置指定的断点 set print thread-events控制打印线程启动或结束是的信息 set sched...

2019-09-03 21:31:15 567

转载 在Linux上分析死锁问题的简单方法

死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。...

2019-09-03 20:42:30 318

转载 Libnids读书笔记

一、当日工作(或学习)内容及进展情况(以条目式陈述,必要时配图说明)Libnids读书笔记:Libnids(Library Network Intusion Detection System)网络入侵检测开发包,基于libpcap和libnet开发,是仿照linux内核中的TCP/IP协议部分而实现的。libnids主要功能包括捕获网络数据包、IP碎片重组、TCP数据流重组以及端...

2019-09-01 09:34:17 374

转载 centos7安装libpcap&libnids

说明:直接用yum安装的libpcap会在libnids安装的时候检查有问题,所以需要下载安装包来安装!1.安装libpcap①下载软件包libpcap-1.0.0.tar.gz下载地址:http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz②解压软件包:tarzxflibpcap-1.0.0.tar.gz③进...

2019-09-01 09:31:33 1963

转载 vim常用命令总结

在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下:v 从光...

2019-08-30 10:27:02 210

转载 TCP的三次握手与四次挥手理解及面试题(很全面)

本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段...

2019-08-14 16:25:17 144

原创 第5章 C++内存模型和原子类型操作(C++并发编程实战)

5.2 C++中的原子操作和原子类型原子操作时不可分割的操作。在系统的所有线程中,你是不可能观察到原子操作完成了一半这种情况;它要么做了,要么就没有做,只有这两种可能。如果从对象读取值的加载操作时原子的,那么对这个对象的所有修改操作也是原子的;要么加载操作得到的值时对象的初始值,要么是某次修改操作存入的值。5.2.1 标准原子类型标准原子类型定义在头文件<atomic>中。...

2019-07-03 07:28:34 609

原创 4.4 使用同步操作简化代码(C++并发编程实战)

4.4.1 使用期望的函数化编程术语函数化编程(functional programming)引用于一种编程方式,这种方式中的函数结果只依赖于传入函数的参数,并不依赖外部状态。函数化编程的好处,并不限于那些将纯粹作为默认方式的语言。C++是一个多范型的语言。在C++11中这种方式要比C++98简单许多,因为C++11支持lambda表达式,还加入了boost和TR1中的std::bind,...

2019-06-26 07:50:27 268

原创 4.3 限定等待时间(C++并发编程实战)

两种指定的超时方式:一种是时延的超时方式——需要指定一段时间(例如30毫秒);第二种是绝对超时方式——指定一个时间点(例如:协调时间[UTC]17:30:15.045987023,2011年11月30号)。多数等待函数提供变量,对两种超时方式进行处理。处理持续时间的变量以_for作为后缀,处理绝对时间的变量以_until作为后缀。4.3.1 时钟对于C++标准库来说,时钟就是时间信息源。特...

2019-06-23 10:50:19 1032

原创 4.2 使用期望等待一次性事件(C++并发编程实战)

期望(future):当一个线程需要等待一个特定的一次性事件,在某种程度上来说它就需要知道这个时间的未来表现形式。之后,这个线程会周期性(较短的)的等待和检查,事件是否触发;在检查期间也会执行其他的任务。另外,在等待期间它可以先执行另外一些任务,知道对应的任务触发,而后等待期望的状态会变为就绪(ready)。一个期望可能是数据相关,也可能不是。当事件发生(并且期望状态就绪),这个期望就不能被重置。...

2019-06-21 08:05:46 413

原创 第4章:同步并发操作(C++并发编程实战)

4.1.1等待条件达成C++标准对条件变量有两套实现:std::condition_variable和std::condition_variable_any。包含在<condition_variable>头文件声明中。两者都需要与一个互斥量一起才能工作;前者仅限于std::mutex一起工作,而后者可以和任何满足最低标准的互斥量一起工作,从而加上了_any后缀。因为std::con...

2019-06-18 08:07:26 326

原创 3.3 保护共享数据的替代设施(C++并发编程实战)

3.3.1 保护共享数据的初始化过程互斥量是最通用的机制,但其并非保护共享数据的唯一方式。这里有许多替代方案可以在特定的情况下,提供更合适的保护。延迟初始化在单线程中很常见——每一个操作都需要先对源进行检查,为了了解数据是否被初始化,然后再其使用前决定,数据是否需要初始化:std::shared_ptr<some_resource> resource_ptr;void ...

2019-06-16 09:50:32 173

原创 第3章:线程间共享数据(C++并发编程实战)

3.2使用互斥量保护共享数据C++通过实例化std::mutex创建互斥量,通过调用成员函数lock()/unlock()来进行加解锁。不过不推荐直接调用成员函数,因为必须记住在每一个函数的出口都要调用unlock(),包括异常。C++标准库提供了一个RAII的模板类std::lock_guard,其会在构造函数的提供已加锁的互斥量,并在析构函数的时候进行解锁,从而保证一个已锁的互斥量总会被正...

2019-06-13 07:12:05 477

原创 2.5识别线程(C++并发编程实战)

线程的标识类型是std::thread::id,可以通过两种方式进行检索。第一:可以通过std::thread对象的成员函数get_id()进行直接获取,如果std::thread对象没有和任何线程相关,get_id()将返回std::thread::type默认构造函数,这个值表示“没有线程”。第二:当前线程中调用std::this_thread::get_id()也可以获取线程标识。std...

2019-06-05 07:22:13 310

原创 2.4运行时决定线程数量(C++并发编程实战)

std::thread::hardware_concurrency()这个函数将返回同时并发在一个程序中的数量。在多核系统中,返回值可以是CPU核心的数量,返回值也仅仅是一个提示,当系统无法获取时,函数返回0。如下实现了一个并行版的std::accumulate:代码中将整体工作拆分成小任务交给每个线程去做,并设置最小的数,是为了避免太多的线程。在操作数为0的时候抛异常:templat...

2019-06-04 07:56:34 743

原创 2.3转移线程的所有权(C++并发编程实战)

C++标准库中很多资源占有(resource-owning)类型,比如std::ifstream,std::unique_ptr还有std::thread都可以移动,但不可以拷贝std::thread支持移动,这意味着线程的所有权可以在函数外移动,就如下面程序一样:std::thread f(){ void some_function(); return std::thread(s...

2019-06-03 07:42:08 239

原创 2.2向线程函数传递参数(C++并发编程实战)

向std::thread构造函数中可调用对象或函数传递一个参数很简单,需要注意的是:默认参数要拷贝到线程独立内存中,即使参数是引用的形式void f(int i,std::string const& s);std::thread t(f,3,"hello");函数第二个参数需要进行隐式转换。当指向动态变量的指针作为参数传递给线程的情况:void f(int i,std...

2019-06-02 09:53:57 433

原创 第2章:线程管理(C++并发编程实战)

2.1线程管理的基础2.1.1启动线程使用C++线程库启动线程,可以归纳为构造std::thread对象:void do_some_work();std::thread my_thread(do_some_work);为了让编译器识别std::thread类,这个简单的例子也要包括<thread>头文件。如同大多数C++标准库一样,std::thread可以调用类型...

2019-06-01 14:10:20 222

原创 第1章:你好,C++并发世界(C++并发编程实战)

1.4.1 你好,并发世界如下一个简单的hello ,Concurrent World程序:#include <iostream>#include <thread> //1void hello() //2{ std::cout << "Hello Concurrent World\n";}int main(){ std::th...

2019-06-01 09:36:41 331

原创 条款17:以独立语句将newed对象置入智能指针

假设某个函数用来揭示程序的优先权,另一个函数用来在某个动态分配所得Widget上进行某些带有优先权的处理,并且“以对象管理资源”,即processWdiget决定对其动态分配而来的Widget运用智能指针:int priority();void processWidget(std::tr1::shared_ptr<Widget> pw,int priority);//调用...

2019-05-31 07:22:36 122

原创 条款16:成对使用new和delete要采取相同形式

当你使用new的时候,一是内存被分配(通过operator new函数),然后是构造函数被调用。当你delete的时候,析构函数被调用,然后内存被释放(通过operator delete)。游戏规则:如果你调用new时使用[ ],你必须在对应调用delete时也使用[ ]。如果你调用new时没使用[ ],那么也不该在对应delete时使用[ ]。为了避免诸如此类的错误,最好不要对数组形式做...

2019-05-31 06:59:50 110

原创 条款15:在资源管理类中提供对原始资源的访问

对于资源管理类而言,有时候你需要处理原始资源(raw resources)的访问。当你使用智能指针如auto_ptr或tr1::shared_ptr保存资源类的时候。当你需要访问智能指针指向的原始资源的时候,你有显示转换和隐式转换两个方法:显示使用智能指针的get函数,隐式方法智能指针重载了指针的取值操作符(operator->和operator*)。有时候必须取得RAII对象内的原始资...

2019-05-30 07:41:26 117

原创 条款14:在资源管理类中小心copying行为

当你使用RAII来管理资源来的时候,面对对象被复制的时候,会发生什么事情,大多数有如下两种选择:禁止复制。因为对于“同步化基础器物”(synchronization primitives)的副本,如果复制动作对RAII class并不合理,就该禁止。 对底层资源使用“引用计数”。有时候希望保有资源,直达它的最后一个使用者(某对象)被销毁。这种情况下复制RAII对象时,就该将资源的“被引用计数...

2019-05-30 06:59:38 137

原创 条款13:以对象管理资源

·所谓资源就是,一旦用了它,将来必须还给系统。C++中最常见的资源就是动态内存分配,其他资源包括文件描述器、互斥锁、图形界面中的字型和笔刷、数据库连接、以及网络sockets。对于手工释放资源,ro为了容易发生某些错误,会资源泄露,我们解决的方法可以把资源放进对象内,依赖C++的析构函数自动调用机制确保资源被释放。许多资源被动态分配于heap内后被用于单一区块或函数内,它们应该再控制流离开...

2019-05-29 07:16:11 96

原创 条款12:复制对象时勿忘其每一个成分

设计良好的面向对象系统(OO-systems)会将对象的内部封装起来,只留两个函数负责对象拷贝(复制),那便是copy构造函数和copy assignment操作符,统称为copying函数。编译器会在必要时候为我们的classes创建copying函数,如果你不喜欢编译器生成的copying,你可以自己声明copying函数,但是当你出错时却不告诉你。1.当你写好copying系列函数的时候...

2019-05-28 07:20:30 137

原创 条款11:在operator=中处理“自我赋值”

“自我赋值”发生在对象被赋值给自己时://方式1class Widget{...};Widget w;...w = w;//方式2a[i] = a[j]; //潜在的自我赋值,如果i和j有相同的值//方式3*px = *py; //潜在的自我赋值,若px和py指向同一个东西class Base{...};class Derived: public Base{......

2019-05-27 08:01:14 283

原创 条款10:令operator=返回一个reference to *this

关于赋值,C++内置类型可以写成连锁形式,赋值都采用右结合律:int x,y,z;x = y = z = 15; //赋值连锁形式//解析如下形式x = (y = (z = 15)); 为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参。class Widget{public: ... Widget& operator = (...

2019-05-25 09:19:34 162

原创 条款09:绝不在构造和析构函数中调用virtual函数

重点:对于C++语言来讲,它和java或者C#不同的是你不该在析构函数和析构函数期间调用virtual函数,因为这样调用会带来预想不到的结果,就算有你也不会高兴。对于继承而言,base class构造期间,virtual函数不是virtual函数。在derived class对象的base class构造期间,对象的类型是base class而不是derived calss。不只virtual...

2019-05-25 09:07:54 187

c++并发编程实战(C++11)pdf 高清

《C++并发编程实战》是一本基于C++11新标准的并发和多线程编程深度指南。内容包括从std::thread、std::mutex、std::future和std::async等基础类的使用,到内存模型和原子操作、基于锁和锁数据结构的构建,再扩展到并行算法、线程管理,最后还介绍了多线程代码的测试工作。本书的附录部分还对C++11新语言特性中与多线程相关的项目进行了简要的介绍,并提供了C++11线程库的完整参考。 ---------------------

2018-12-17

高质量C++/C编程指南

林锐,国内知名的软件工程专家和研发管理咨询师。西安电子科技大学硕士,浙江大学计算机系博士。2000年7月加入上海贝尔有限公司,从事软件工程和CMM的研究推广工作。2003年7月当选为Alcatel集团技术专家。2004年初创建上海漫索计算机科技有限公司(http://www.chinaspis.com),致力于创建适合国内IT企业需求的研发管理解决方案,包括方法论和软件产品。已出版著作七部。

2018-12-17

空空如也

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

TA关注的人

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