自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(166)
  • 资源 (4)
  • 问答 (3)
  • 收藏
  • 关注

原创 Linux 802.11n CSI Tools常见问题,故障排除

1、怎样设置无线数据速率(或者得到其他站点信息)?A.在debugs目录中发现其他站点信息当802.11接口连接到其他的站点,在debugs下会创建一个目录,有这个站点的MAC地址。注意如果这个接口在客户端模式下,它将只会连接到一个站点AP,但是在其他的模式下,它将连接到多个站点。这些站点的信息如下:$sudols/sys/kernel/debug/ieee80211/

2017-03-22 21:22:49 10284 3

原创 IEEE 802.11n协议中CSI报告来源

本文首发在 麻子来了 博客一、引言:MSDU(MAC层业务数据单元。这是最原始的待发数据信息)经过封装变成MPDU(MAC层协议数据单元),MPDU传到PLCP子层变成PSDU(PLCP子层业务数据单元),PSUD经过封装变成PPDU(PLCP子层协议数据单元)。802.11协议帧格式图1MACframeformat其中Fr

2017-03-16 11:06:44 5230 2

原创 究竟什么是CSI

本文手发在究竟什么是CSICSI(ChannelStateInformation):信道状态信息,本文中特指在无线定位领域中的信道状态信息。一、什么是信道状态信息?在无线通信领域,所谓的CSI,就是通信链路的信道属性。它描述了信号在每条传输路径上的衰弱因子,即信道增益矩阵H(有时也称为信道矩阵,信道衰落矩阵)中每个元素的值,如信号散射(Scatterin

2017-03-13 16:55:45 34093 8

原创 究竟什么是RSSI

本文首发在究竟什么是RSSI一、基本概念:RSSI:ReceivedSignalStrengthIndication接收的信号强度指示,无线发送层的可选部分,用来判定链接质量,以及是否增大广播发送强度。因为无线信号多为mW级别,所以对它进行了极化,转化为dBm而已,不表示信号是负的。1mW就是0dBm,小于1mW就是负数的dBm数。接收的信号强度指示:RS

2017-03-13 16:52:17 66837 9

转载 system v共享内存与信号量综合

关于SystemV共享内存和信号量的知识已经学过了,这次主要是综合这两者来解决一个问题达到灵活运用的目的,下面开始:生产者消费者问题:关于什么是“生产者消费者”,应该都比较清楚,这里还是先贴上百度百科对它的描述:下面用图来说明一下该问题:以上就是生产者消费者从逻辑上的一个解决方案,从中可以看到这是互斥跟同步相结合的例子,下面则用所画的这些模型来实现一下shmf...

2020-03-15 12:18:38 436

原创 常见并发服务器实现方案分析

首先,我们要清楚,什么是并发?什么是多线程?为什么需要多线程?为什么需要并发服务器?为什么要使用多线程技术为什么多线程会提高响应速度?我们知道,线程一般分为:I/O线程(这里特指网络I/O,每个reactor就是一个IO线程);计算线程,==》耗费cpu;第三方库所用线程,如logging,又比如database//这些操作不应该放在计算线程中执行。例如记录日志,多个线程写日志,由...

2020-03-15 09:56:37 698

原创 System V信号量解决哲学家就餐问题

一、哲学家就餐问题:五个哲学家围在一个圆桌就餐,每个人都必须拿起两根筷子才能用餐,当每个人都先拿起左筷子,等待右筷子的时候就会造成死锁。解决方案仅当一个哲学家两边筷子都可用时才允许他拿筷子就餐。二、代码:#include<stdio.h>#include<stdlib.h>#include<sys/ipc.h>#include&...

2020-03-08 18:14:33 1534

原创 System V信号量

一、信号量具体函数使用:信号量API接口解析二、信号量函数使用示例:#include <sys/types.h>#include <unistd.h>#include <sys/ipc.h>#include <sys/sem.h>#include <errno.h>#include <stdio.h>...

2020-03-08 12:37:14 520

原创 System V共享内存

共享内存:是最快的IPC形式,一旦这样的内存映射到共享它的进程的地址空间,这些进程间的数据传递不再涉及到内核,不用通过执行进入内核的系统调用来传递彼此的数据。mmap函数:功能:将文件或者设备空间映射到共享内存区。void*mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);参数addr:...

2020-03-01 16:14:21 258

原创 System V消息队列

一、进程间通信方式:1管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。3消...

2020-02-23 18:46:31 387

原创 SOCKET网络编程五:IO多路复用epoll

一、关于select、poll、epoll这三者使用、对比介绍这篇:网络编程--IO多路复用之select,poll和epoll详解二、poll的使用和上篇的select大同小异:int main(void){ //当客户端结束时,服务器还维持一个僵尸进程 signal(SIGCHLD, SIG_IGN);//使用signal忽略SIGCHLD信号(第一种方法) /*sign...

2020-02-16 11:56:22 456

原创 SOCKET网络编程四:SELECT单进程并发服务器

五种IO模型:阻塞IO:recv接收缓冲区有数据后,就会解除阻塞。非阻塞IO:忙等待fcntl(fd,F_SETFL,flag|O_NONBLOCK)IO复用(select和poll)信号驱动IO异步IO...

2020-02-15 16:16:35 716

原创 SOCKET网络编程三:TCP粘包问题处理

TCP是字节流协议,原始数据之间是没有边界的。发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。所谓粘包问题本质还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。粘包问题解决方案:0、发送和接收都定义固定大小。1、发送方接收方都协商...

2020-02-13 21:05:08 422 1

原创 SOCKET网络编程二:点对点聊天程序

1、要进行点对点聊天,首先需要既能发送,又能接收,如果发送接收放在一个进程有可能导致数据包丢失,因此需要新开一个进程,一个进程在套接字上接收,一个进程在套接字上发送。2、父进程和子进程是可以共享文件描述符的。3、fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,f...

2020-02-13 13:05:20 1434

原创 SOCKET网络编程一:回射客户服务器

socket可以看成是用户进程与内核网络协议栈的编程接口。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信一、基础TCP客户端服务器模型(C/S模型)服务端:Socket创建套接字==》 安装一部话机 Bind绑定==》绑定一个电话号码 Listen监听 Accept等待对方连接==》等待对方电话拨打过来,如果没有对方电话拨打过来...

2020-02-11 16:18:40 593 2

转载 一台主机,至多可以开启多少个线程

最近在做服务器压力以及并发测试,因为是C/S模型,所以需要自己模拟客户端,需要运行大量的线程模拟并发,于是就碰到这个问题了。另一个原因是,我在服务器中创建了一个线程池,我很想知道线程池的个数上限,从而更好的制定线程池动态增减的方法,所以也做了同样的测试。首先分析32位linux系统对32位系统来说,理论上的寻址范围是4G(2^32),但实际系统还要预留系统空间用于自身管理,一般来说...

2020-02-09 15:28:24 8418 1

原创 muduo库学习笔记十六:base库之日志库三 LogFile类

LogFile类:1、在介绍Logger类时,我们提到Logger类可以自定义Output xx函数和Flush xx函数,由用户来选择日志信息的输出位置以及flush方式,例如在muduo库学习笔记十三:base库之日志库一 Logger类示例程序中,我们就使用fwrite和fflush作为日志信息输出方法。而LogFile类就相当于定义了Muduo库自己的输出到日志文件的Output和Fl...

2020-02-08 14:13:32 472

原创 muduo库学习笔记十五:base库之日志库二 LogStream类

LogStream类:muduo没有用到标准库的iostream,而是自己写的LogStream类,这主要是出于性能。LogStream类,让它如同C++的标准输出流对象cout,能用<<符号接收输入,cout是输出到终端,而LogStream类是把输出保存自己内部的缓冲区,可以让外部程序把缓冲区的内容重定向输出到不同的目标,如文件、终端、socket。LogStream类图:...

2020-02-07 21:23:07 480

原创 muduo库学习笔记十四:base库之日志库一 Logger类

muduo日志库概述:C++ 采用stream风格,这样用起来更自然,不必费心保持格式字符串和参数类型的一致性,可以随用随写,而且是类型安全的。stream风格的另一个好处是当输出的日志级别高于语句的日志级别时,打印日志是个空操作,运行是开销接近零,而printf风格不易做到。muduo日志库整个底层主要由Logger类、LogStream类两个类实现。日志记录执行流程为:Lo...

2020-02-06 19:28:00 605 1

原创 muduo库学习笔记十三:base库之ThreadLocalSingleton

线程本地存储单例类:针对“每个结构”每个线程仅有一个线程本地存储类对象t_value_:类型为T的指针是pod类型可以用__thread修饰,每个线程一份deleter:Deleter类对象instance():返回T引用pointer():返回T指针destructor():借助Deleter才能被调用Deleter类:嵌套在ThreadLocalSinglet...

2020-02-06 09:32:03 443

原创 muduo库学习笔记十二:base库之threadLocal

ThreadLocal类:线程本地存储类为什么需要这个类?我们经常要用到"全局变量"以实现多个函数间共享数据。在单线程程序中,这样做是没有问题的,但是在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时,有些数据仅仅在某个线程需要,因此有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。在muduo库学习笔记五:base库之Thread类中我...

2020-02-05 16:00:04 358

原创 muduo库学习笔记十一:base库之Singleton

模板单例类:线程安全的单例模式实现// Use of this source code is governed by a BSD-style license// that can be found in the License file.//// Author: Shuo Chen (chenshuo at chenshuo dot com)#ifndef MUDUO_BASE_S...

2020-02-05 12:03:40 396

原创 muduo库学习笔记十:base库之ThreadPool

ThreadPool类:线程池类,muduo中线程池类线程个数是固定的。类图:其中:mutex_:互斥量cond_:条件变量与互斥量配合使用,当条件满足时,唤醒线程执行任务name_:线程池名称threads_:线程队列,内部存储的线程指针queue_:任务对列,内部元素类型为typedefboost::function<void()>Task;是...

2020-02-05 11:01:10 269

原创 muduo库学习笔记九:base库之BlockingQueue

BlockingQueue类:使用条件变量实现的无界队列类图:其中:mutex_:互斥量notEmpty_:条件变量queue_:队列put:生产产品take:消费产品size:队列大小以生产者消费者模型来说明该类的使用:(这里假设队列是有界的,所有生产前需要判断队列是否已满)测试程序:#include <muduo/base/Block...

2020-02-04 22:12:31 206

原创 muduo库学习笔记八:base库之Condition

Condition类:是muduo库中对系统线程条件变量类函数进行的封装;往往跟mutexlock配合使用,但也不控制其对象的生存期。类图:条件变量使用规范为: wait函数主要工作为:整个condition类主要为方便用户使用,封装pthread_cond_signal为notify(),封装pthread...

2020-02-04 17:25:18 251

原创 muduo库学习笔记七:base库之Mutex

Mutex互斥量:muduo库中的封装为MutexLock类与MutexLockGuard类。类图:继承boost::noncopyable,对象语义不能拷贝,该类主要是对一系列系统线程函数pthread_mutex_XXX的封装。私有数据成员:mutex_:存储linux线程互斥量pthread_mutex_tholder_:存储拥有该锁的线程的tid公有成员函数:...

2020-02-04 13:46:45 335

原创 muduo库学习笔记六:base库之Thread类pthread_atfork

pthread类知识点:1、boost::is_same判断两种类型是否是同一类型 2、pthread_atfork函数原型:intpthread_atfork(void(*prepare)(void),void(*parent)(void),void(*child)(void));对应头文件:#include<pthread.h>用法:调用fork时,内...

2020-02-03 18:06:12 343

原创 muduo库学习笔记五:base库之Thread类

Thread类:muduo库中的线程封装类。类图:私有成员变量:started:表示线程是否启动pthreadId:Linux下的POSIX线程也有一个id,类型pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。tid:该线程的真实id,可以唯一标识一个线程func:该线程要回...

2020-01-05 20:44:13 515

原创 muduo库学习笔记四:base库之Exception类

Exception类:继承自标准模板库exception,主要功能为记录异常发生时的堆栈信息。类图:私有成员变量:message_: 存储异常信息字符串 stack_ :存储异常发生时栈信息私有成员函数:fillstacktrace:用于记录异常发生时栈回收的信息,在构造函数中被调用公有成员函数:what: 返回message stackTrace:返回stack...

2019-12-22 15:25:08 299

原创 muduo库学习笔记三:cmake使用解析

cmake是项目管理工具:简化编译构建过程和编译过程。Cmake的工具链非常简单:cmake+make。在Linux平台下使用CMake生成Makefile并编译的流程如下:A、编写CMake配置文件CMakeLists.txtB、执行命令cmakePATH生成Makefile,PATH是CMakeLists.txt所在的目录。C、使用make命令进行编译。其中,A既是下文注释的文件,...

2019-12-15 22:01:26 1315

原创 muduo库学习笔记二:base库之timestamp

一、类功能:时间戳类,主要提供基础的时间值获取、计算功能类图:常量kMicroSecondsPerSecond表示每秒所对应的微秒数成员变量microSecondsSinceEpoch_表示到1970-01-01 00:00:00 UTC的微秒数成员函数swap()交换操作 toString()、toFormattedString()将时间转换为string类型或指定...

2019-12-08 13:17:23 348

原创 muduo库学习笔记一:编译安装

开发环境准备:使用Vm虚拟机,安装CentOS release 6.5 (Final)版本muduo库整个项目使用cmake编译,所以需要先安装cmake。使用yum安装,安装前确保配置了可用的yum源。安装完cmake,我们便可以来编译muduo库了。在muduo/路径下,直接执行./build.sh从报错信息来看,我们缺少gcc库,yum install gcc...

2019-11-17 20:07:27 825

原创 linux多线程网络库-muduo库学习

什么是muduo库Muduo 是基于 Reactor 模式、线程安全的、支持多核多线程的简单易用的网络库。符合现代C++编程规范、大量使用boost的开源网络库。为什么学习muduo库muduo库对学习linux下面向过程C++编程、多线程编程、boost库应用实践,有非常大的帮助。通过分析muduo的源代码,深入理解服务器端多线程网络开发实现。此外,muduo库提供了丰富的示例...

2019-11-10 14:14:44 1051

原创 C++模板类中迭代器用法备忘

模板类中的迭代器前一定要加typename,否则编译不通过。typenamevector<T>::iteratorit;

2019-11-10 10:36:28 732 3

转载 Thrift框架介绍

1、前言Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltal...

2019-07-07 09:55:32 4949

原创 STL容器使用常见问题整理

1、vector的删除 //初始化 vector<int> vecTest; vecTest.push_back(100); vecTest.push_back(200); vecTest.push_back(300); vecTest.push_back(400); //删除 vector<int>::...

2019-07-07 09:27:10 529

原创 面向对象设计模式学习笔记十六总结

如何运用?现代软件设计的特征是“需求的频繁变化”。设计模式的要点是“寻找变化点,然后在变化点处应用设计模式,从而来更好地应对需求的变化” .设计模式的应用不宜先入为主,一上来就使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。敏捷软件开发实践提倡的“Refactoring to Patterns” 是目前普遍公认的最好的使用设计模式的方法。一定要重构到设计模式。怎样重构?...

2019-03-10 13:10:42 142

原创 面向对象设计模式学习笔记十五享元模式

为什么需要享元模式在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价---主要指内存需要方面的代价。什么是享元模式运用共享技术有效地支持大量细粒度的对象。类图示例class Font {//将字体实现为对象private: //unique object key string key; /...

2019-03-10 12:32:57 169

原创 面向对象设计模式学习笔记十四单例模式(多线程)

为什么需要单例模式?面向对象很好的解决了抽象问题,但是必不可免的要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。在软件系统中,经常有一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保他们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?什么是单例模式保证一个类仅有...

2019-03-10 11:46:45 147

原创 面向对象设计模式学习笔记十三观察者模式

为什么需要观察者模式在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密, 将使软件不能很好地抵御变化。使用面向对象技术(观察者模式),可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。举例:目前项目需要将文件分割器的分割进度通知到界面显示。...

2019-03-03 18:09:19 188

linux多线程入门资料精选.zip

精选linux多线程开发资料,是linux多线程开发入门必备资料,从网络编程到多线程技术都有详细介绍

2019-12-08

QTWinmigrate

QT提供的与的交互框架

2017-06-27

内存泄漏检测

安装本资源在VS安装目录下,在程序中最开头#include"vld.h",用来检测内存泄漏。

2017-05-18

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

TA关注的人

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