- 博客(80)
- 资源 (43)
- 收藏
- 关注
原创 C++(数据结构与算法):63---分支定界、分支定界应用(货箱装载、0/1背包问题、最单完备子图、旅行商问题、电路板排列)
一、前言寻找问题的解的一种可靠的方法: 是首先列出所有候选解,然后逐个,在检查完所有或部分候选解之后,即可找到所需要的解 理论上,只要候选解数量有限,并且在检查了所有或部分候选解之后可以确定所需解。 这种方法是可行的。不过在实际应用中,很少使用这种方法, 因为候选解的数量通常都非常大(比如指数级,甚至是大数阶乘),即便采用最快的计算机,也只能对实例规模相当小的问题在合理的时间内解...
2020-04-28 19:31:44 997
原创 C++(数据结构与算法):61---动态规划、动态规划应用(0/1背包、矩阵乘法链、所有顶点对之间的最短路径、带有负值的单源最短路径、网组的无交叉子集)
一、动态规划的思想动态规划的基础是最优原理 动态规划和贪婪算法一样,对一个问题的解是一系列抉择的结果 在贪婪算法中,我们依据贪婪准则做出的每一个抉择都是不可撤销的 在动态规划中,我们要考察一系列抉择,以确定一个最优抉择序列是否包含最优抉择子序列 二、实际应用之最短路径问题描述我们要选择一条从源点s=1到目的顶点d=5的最短路径动态规划的解决思想第一步:可以选...
2020-04-28 14:05:26 947
原创 项目(百万并发网络通信架构)11.2---将消息的接收与发送分离
一、前言在前面的文章中,我们的服务端在接收到客户端的数据之后,对数据处理完会给客户端回送一个消息,这种做法实际上是低效的,因为在数据recv()接收之后再去调用send(),那么当send()阻塞或速度过慢时,会导致当前线程无法继续向前执行或执行较慢,那么会影响后面recv()的再次调用,从而降低服务端的性能,而且会使缓冲区膨胀二、将消息的接收与发送分离方案我们将recv()之后给客户端...
2020-04-26 14:56:32 1892 3
原创 项目(百万并发网络通信架构)11.1---修改数据接收缓冲区、新增数据发送缓冲区
一、修改数据接收缓冲区在前面的两篇文章中,我们分别为服务端和客户端都设计了数据的接收缓冲区,那两篇文章中的设计中,分别建立了两个缓冲区,一个缓冲区用来先存储从recv()中接收到的数据,然后再拷贝到另外一个缓冲区中进行处理,本文将两个缓冲区改为只只用一个缓冲区。可以参阅:https://blog.csdn.net/qq_41453285/article/details/105405445、ht...
2020-04-26 10:43:01 1003
原创 项目(百万并发网络通信架构)10.4---服务端数据收发的性能瓶颈
前言现在我们把服务端和客户端的代码修改一下,修改为两者互相发送与接收数据一、服务端最终代码主要就是修改CellServer::OnNetMessage()中的代码,使其在接收到数据之后返回数据给客户端#ifndef _EasyTcpClient_hpp_#define _EasyTcpClient_hpp_#ifdef _WIN32 #define FD_SETSIZE 10...
2020-04-24 21:51:37 985
原创 项目(百万并发网络通信架构)10.3---send()函数的极限测试
前言本文进行send()函数的测试,查看在不同的情况下send()函数每秒大概可以执行多少次 因为是对send()函数测试,所以我们用客户端给服务器send()发送数据,不接收数据;服务端只使用recv()函数接收数据,但是不给客户端发送数据 我们使用client给server发送大量数据,但是将client中的send()函数参数3改为1,因此每次只发送1个字节的数据,但是因为单个数据包...
2020-04-24 17:47:53 990
原创 项目(百万并发网络通信架构)10.1---服务端select的性能瓶颈与优化
一、测试场景本文测试1000个客户端连接服务端,客户端只发送数据,服务端只接收数据,一方发送一方接收二、客户端的代码如下EasyTcpClient.hppEasyTcpClient.hpp代码没有变化,如下所示#ifndef _EasyTcpClient_hpp_#define _EasyTcpClient_hpp_#ifdef _WIN32 #define WIN32...
2020-04-23 09:42:27 1015
原创 项目(百万并发网络通信架构)9.4---多线程客户端服务端最终代码测试
前言前面几篇文章改造好了客户端与服务端的代码,本文进行测试 服务端是多线程的,其业务逻辑代码中用到了多线程 客户端的业务逻辑代码不是多线程的,只是其测试代码main函数中用到了多线程一、测试10000客户端连接客户端测试代码如下这个代码在前面文章介绍过,此处只是将客户端的数量cCount变量改为了10000#include "EasyTcpClient.hpp"#incl...
2020-04-22 16:34:09 1173
原创 项目(百万并发网络通信架构)9.3---将服务端改造为多线程(生产者-消费者模式)
一、分离客户端连接与消息处理业务主要的操作有: 建立一个CellServer()类 让CellServer()类处理客户端的消息 #ifndef _EasyTcpClient_hpp_#define _EasyTcpClient_hpp_#ifdef _WIN32 #define FD_SETSIZE 2048 #define WIN32_LEAN_AND_MEAN #...
2020-04-22 16:22:49 989 2
原创 C++(标准库):51---并发之(原子操作:atomic)
本文先介绍atomic的高层接口:它所提供的操作将使用默认保证,不论内存访问次序如何。这个默认保证提供了顺序一致性,意思是在线程之中atomic操作保证一定“像代码出现的次序”那样地发生 然后再介绍atomic的底层接口:带有“放宽之次序保证”的操作 C++标准库并不区分atomic的高层或底层接口: 底层是Hans Boehm说的,他是这个程序库的作者之一 某些时候atomic底层接口...
2020-04-19 12:50:16 4166
原创 C++(标准库):50---并发之(条件变量:condition_variable、condition_variable_any)
一、Condition Variable(条件变量)的意图在前文的文章中(详情见“八”:https://blog.csdn.net/qq_41453285/article/details/105602105),我们有一个演示案例,让某线程等待另一线程,其使用的办法是使用ready flag的方法。代码如下:bool readyFlag;std::mutex readyFlagMutex;...
2020-04-19 10:41:48 2327
原创 C++(标准库):49---并发之(一次调用:std::once_flag、std::call_once)
一、先来看一些例子有些代码中,某些代码会被多线程使用,但是当一个线程使用之后,其他线程就不能再去使用了 例如: 下面的代码会调用一个initialize()初始化函数对某些东西进行初始化,当一个线程去初始化之后,另外的线程再次执行时就不需要再次去初始化了 但是在多线程环境下,下面的if会造成data race,因为多个线程可能同时执行到了if,并且没有任何措施,导致都执行了if,因此造...
2020-04-18 20:31:52 1425
原创 C++(标准库):48---并发之(互斥体mutex、lock_guard、recursive_mutex、timed_mutex、recursive_timed_mutex、unique_lock)
一、mutexmutex全名mutual exclusion(互斥体),是个object,用来协助采取独占排他方式控制“对资源的并发访问” 例如,下面对一份资源进行锁定void f(int val);int val; //共享资源std::mutex valMutex; //互斥体void func(){ //锁定,然后操作共享资源 v...
2020-04-18 17:55:55 1592 1
原创 C++(标准库):47---并发之(thread_thread命名空间)
针对任何线程(包括主线程),<thread>声明了一个命名空间std::this_thread,用以提供线程专属的global函数 支持的操作如下:sleep_for()、sleep_until()当处理系统时间调整时,sleep_for()和sleep_until()往往不同。(详情见此篇文章中的“七”:https://blog.csdn.net/qq_41453285...
2020-04-18 13:20:52 727
原创 C++(标准库):46---并发之(细说启动线程:async、future、shared_future、promise、packaged_task、thread)
待续
2020-04-18 13:06:23 2708
原创 C++(标准库):45---并发之(底层接口thread()、promise、packaged_task)
除了前一篇文章介绍的高级接口async()和(shared)future,C++标准库还提供了一个启动及处理线程的底层接口一、threadthread概述thread可以用来启动一个线程,其参数也接受一个callable object(函数、成员函数、函数对象、lambda) callable object的传参方式与saync()一样,并且也有传值调用和传引用调用的方式,详情可以参...
2020-04-17 21:30:17 1025 1
原创 C++(标准库):43---string字符串
一、string简介概念:string表示可变长的字符序列,string作为标准库的一部分 使用前需要导入头文件与命名空间,string定义在std中#include <string>using std::string;二、string对象的初始化1.几种初始化方式string s1; //默认初始化,s1是一个空串string s2(s1);strin...
2020-04-13 13:25:34 1169
原创 C++(标准库)34---STL算法之(算法总体概述)
一、算法的头文件如果想要使用C++标准库的算法,必须包含以下头文件: 此头文件还包含了若干辅助函数:min()、max()、minmax()、iter_swap() #include <algorithm>如果STL算法用于数值运算,还需要包含下面的头文件:#include <numeric>二、算法的特殊命名后缀STL设计者为算法命名时,引入...
2020-04-13 13:12:58 846
原创 C++(标准库):28---STL迭代器之(迭代器适配器(插入迭代器、流迭代器、反向迭代器、移动迭代器))
除了每个容器有自己的迭代器之外,标准库在头文件iterator中还定义了额外几种迭代器 这些迭代器包括: 插入迭代器(insert iterator):这些迭代器被绑定到一个容器上,可用来向容器插入元素 流迭代器(stream iterator):这些迭代器被绑定到输入或输出流上,可用来遍历所有关联的IO流 反向迭代器(reverse iterator):这些迭代器向后而不是向...
2020-04-13 12:47:13 535
原创 C++(标准库):27---STL迭代器之(迭代器相关辅助函数(advance()、next()、prev()、distance()、iter_swap()))
待续
2020-04-13 12:44:34 540
原创 C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))
一、迭代器的头文件所有的容器都定义有自己的iterator类型,因此如果单单使用容器,只需要包含对应容器的头文件即可 不过有些特殊的iterator,被定义在头文件<iterator>中二、迭代器介绍类似于容器,迭代器也定义了一组公共操作: 一些操作所有迭代器都支持 另外一些只有特定类型的迭代器才支持 例如,ostream_iterator只支持递增、解引用、赋...
2020-04-13 12:43:19 1751
原创 C++(标准库):25---STL容器之(实现容器reference语义)
一、C++标准库提供的是value语义通常,所有容器都会建立元素拷贝,返回的也是元素的拷贝 STL只支持value语义,不支持reference语义。优缺点如下: 优点: 复制元素很简单 使用reference时容易出错,你必须确保reference所指对象仍然健在,并需要小心队服偶尔出现的环式指向状态 缺点: 复制元素可能会导致不良的效率,有时甚至无法复制 ...
2020-04-13 12:34:09 940 1
原创 C++(标准库):24---STL容器之(特殊容器bitset)
一、bitset概述标准库定义了bitset类,使得位运算使用更为容易,并且能够处理超过最长整型类型大小的位集合 bitset定义在头文件bitset中二、定义和初始化bitset上图给出了bitset的构造方法 低位与高位: 二进制集合的起始位置(索引为0)称为低位,往后的称为高位 注意,bitset的索引0从最右侧开始 bitset是一个类模板,类似于array类...
2020-04-13 11:20:30 680
原创 C++(标准库):23---STL容器之(容器适配器之priority_queue)
一、容器适配器概述 什么是适配器(container adapter): 一个适配器是一种机制,能使某种事物的行为看起来像另外一种事物一样 容器、迭代器、函数都有适配器(本文主题是容器的适配器) 容器适配器就是通过上面这些容器底层实现,使上面那些容器能拥有一些行为和特点 标准库提供的容器适配器有: stack:栈。具有先进后出的特点。 基础语法参阅:https://bl...
2020-04-13 11:15:26 542
SGI STL源码.zip
2020-08-26
QQChat.zip
2020-08-06
vrctorList.zip
2019-11-23
arrayList.cpp
2019-11-23
arrayList.zip
2019-11-22
USB DNW.zip
2019-11-11
01.OpenOCD with GUI setup.zip
2019-11-11
OpenJTAG.zip
2019-11-11
openwrt-17.01.4-17.01.4.zip
2019-10-16
LinEnum-master.rar
2019-09-21
webshell b374k.zip
2019-09-19
HTTPS单向认证通信
2019-09-14
PthreadPool.zip
2019-09-14
sqIi-labs,SQL注入平台
2019-08-06
glibc-2.27.tar.gz
2019-07-22
pthread_pool2.zip
2020-12-20
binarySearchTree.zip
2020-01-23
linkedBinaryTree.zip
2020-01-22
completeWinnerTree.zip
2020-01-12
maxHblt.zip
2019-12-22
maxHeap.zip
2019-12-21
arrayTree.zip
2019-12-16
hashChains.zip
2019-12-15
SGI STL源码.zip
2019-12-14
hashTable.zip
2019-12-13
skipList.zip
2019-12-12
sortedChain.zip
2019-12-08
derivedLinkedStack.zip
2019-12-05
derivedArrayStack.zip
2019-12-05
squareMatrix.zip
2019-11-30
单链表chain.zip
2019-11-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人