您现在的位置是:首页 >技术交流 >C++服务器框架开发1——项目介绍/分布式/#ifndef与#pragma once网站首页技术交流
C++服务器框架开发1——项目介绍/分布式/#ifndef与#pragma once
该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。
其教学视频见:[C++高级教程]从零开始开发服务器框架(sylar)
C++服务器开发1——项目介绍/分布式/#ifndef与#pragma once
最近开始学习下C++的项目开发,找了很多,在b站发现了一个教开发一套C++高性能服务器框架的up(sylar-yin),而且它有提供源码以及自己的博客。内容看着很全,就打算学一下。
目前我的C++能力仅仅是会基础,以及刷了几十到算法题。但是刷题太枯燥了,我离实习找工作还有段时间,所以想抽空先学个完整的开发项目,就挑了这个,如果后面发现学不会,我可能会放弃,但我会尽量学习完这个up的80个视频。本着需要什么学什么的态度,我遇到不会的,就查一下,然后做个笔记。
这次的笔记内容是:项目介绍、什么是分布式、#ifndef与#pragma once
项目介绍
详细见这页博文:http://www.sylar.top/blog/?p=137
github原话:C++高性能分布式服务器框架,webserver,websocket server,自定义tcp_server(包含日志模块,配置模块,线程模块,协程模块,协程调度模块,io协程调度模块,hook模块,socket模块,bytearray序列化,http模块,TcpServer模块,Websocket模块,Https模块等, Smtp邮件模块, MySQL, SQLite3, ORM,Redis,Zookeeper)
我看完感觉很多都不懂,先搁置吧。先学习下“分布式”。
分布式
我主要看的这篇:什么是分布式,分布式和集群的区别又是什么?这一篇让你彻底明白!
分布式:多个系统在多个服务器上协作完成单个任务。
集群式:单个系统在多个服务器上
~~~~~
完成单个任务。
概括两者的差异:分布式系统的服务器任务是不同的,它们之间相互调用,完成了一个大的任务。而集群式系统的服务器任务是相同的,它们只是分担了客户端的请求,但是最终需要汇总到主服务器。这导致像数据库、主服务器等可能会过载。
#ifndef与#pragma once
视频1中,最开始讲的代码是log.h。然后吃下了如下的结构:
#ifndef __SYLAR_LOG_H__
#define __SYLAR_LOG_H__
//这里放置了各种include和定义语句
#endif
这种写法,是为了避免重复编译的,因为,这个log.h文件,很可能会被多个文件include,如果用了这种写法,当编译过一次后,第二次遇到include时就会自动跳过这个编译。
它和#pragma once
的功能很像,我看了我之前刷题的代码,是将#pragma once
放在了代码最前面。
差异:1#ifndef
是打开文件后,根据__SYLAR_LOG_H__
来确认是否已经编译过。所以它需要打开文件查看后后才能确定,编译时耗时比较长。注:有可能会因为不同头文件的宏名相同后,后编译的那个头文件被跳过编译,导致编译时报错某些变量或类没有声明。2#pragma once
是针对文件的,所以没有宏名相同这种问题,并且它因为不需要打开文件而使得编译速度更快。注:如果有头文件被拷贝多份,就会出现重复编译的问题。且这种方法在一些老编译器上不支持。
个人认为,还是选择第一种靠谱些,虽然编译慢,但出错的可能性更低。