C++20 - 协程
C++20引入了协程的概念,但是对于首次接触的开发者来说,理解起来还是有些吃力,本文尝试一次性讲通协程的基本概念以及用法。
C++20引入了协程的概念,但是对于首次接触的开发者来说,理解起来还是有些吃力,本文尝试一次性讲通协程的基本概念以及用法。
官方 OmniTool 由以下 4 个模块组成:
谈起设计模式,最经典的莫过于Gof的23种经典设计模式,最近阅读了《设计模式-可复用面向对象软件的基础》一书,感触良多。
本文主要讲解Windows下字符编码的转换方法。
本文章主要讲解C++中指针相关问题,包括原始指针、野指针、空悬指针、智能指针(shared_ptr、unique_ptr、weak_ptr)、内存泄漏、循环引用、智能指针与多线程等知识。
Git的用途毋庸多说,但是因为命令众多,好多命令一段时间不用,也被忘记的七七八八了,所以将常用的命令记下来,以备不时之需。
搭建博客的方案有很多,比如静态博客(hugo、hexo)、WordPress和typecho等。
静态博客在本地使用支持MarkDown的工具撰写文章,然后使用hugo等工具生成html页面,后续托管在GitHub上,优点是不用担心后续的托管问题,比较省心;缺点是没有管理后台。
PostgreSQL自身只提供了流复制的功能,想要搭建高可用集群的话,需要借助第三方库pgpool来实现。pgpool之间互相通信,并且监控PostgreSQL数据库,当有一个数据库节点宕机时,可以保证整个集群可用。如果是primary节点宕机,则让另外的standby节点提升为primary节点。如果是standby节点宕机,则对整体集群无影响。以此来保证数据库集群的高可用。
UDP为无连接不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。
客户端不需要与服务器事先建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指定服务器的地址作为参数。
服务器不接受来自客户的连接,而是只管调用recvfrom函数,等待来自某个客户的数据到达。recvfrom将与所接收的数据报一道返回客户的协议地址,因此服务器可以把相应发送给正确的客户。
为了测试PostgreSQL和PostGIS在大数据量下,对轨迹检索的性能,做了此次测试。
滴滴的轨迹数据已经不提供了下载连接,所以无法下载到。从网上搜索后,发现能下载到成都市2014年8月份的出租车轨迹数据,此数据集比较大,共12亿条左右,压缩后为6.7 GB左右。此次仅测试在1亿数据量的条件下,检索轨迹的性能,所以只使用了其中2天的数据,数据量为1.079亿条:
前两篇分别介绍了IO多路复用的select()和poll()。
select()解决了传统的网络编程中,一个线程只能服务一个客户端连接的问题,但是最多只能同时监听1024个文件描述符,并且效率比较低。poll()解决了select()监听文件描述符个数限制的问题,但是并没有解决效率的问题。本篇介绍epoll(),既解决了描述符个数限制的问题,又解决了效率问题。
前一篇介绍了IO多路复用中的select(),但是select()的缺点很明显,监控描述符的个数不能超过1024个,所以后来为了解决这个问题,引入了poll(),理论上poll()监听的描述符个数不受限制,但是实际能监控的描述符个数和机器自身的硬件配置有关系。
在Linux系统下,select()为最早支持IO多路复用的系统调用。该接口相比poll()、epoll()来说,更为简单,但是效率较低,而且最大只支持FD_SETSIZE(1024)个描述符。如果对并发数量的要求高于1024,请考虑使用poll()或者epoll()。