- 博客(639)
- 资源 (21)
- 问答 (1)
- 收藏
- 关注
原创 一步一步写线程之十六线程的安全退出之一理论分析
其实多线程如此,多进程大抵亦也如此!只不过目前来看写多进程的已经非常少了。总结到最后,多线程的安全退出只有一条原则,就是让每个线程自己正常退出,而不是暴力打断它的执行。只要贯彻了这一原则,就不会出现多线程退出的各种异常问题。可是,实际的场景复杂又多变,有的时候确实无法等待所有的线程正常的退出,这就需要开发者自己根据情况进行取舍。有舍才有得,亘古不变的道理!
2024-11-30 11:01:40 737
原创 跟我学C++中级篇——通信的数据的传递形式
杀鸡用牛刀,这是人们常说的大材小用。可还有一句话叫“狮子搏兔”,要尽全力一击。这两个都对,其实就是面对不同的场景下,开发者的选择问题。既要又要还要,那种好事儿谁都想要。结合实际情况,哪个更合适自己,就用哪个。毕竟,有的时候开发程序不单纯是一个技术问题。
2024-11-29 21:56:54 825
原创 c++应用网络编程之十五Nagle算法
正如前面反复分析阐述的,任何技术都其产生的时代背景和当时的意义,而Nagle算法也是如此。其在通信延时较低的场景下几乎没有什么意义。因为其靠ACK返回来进行判定传输发送的一个前提,所以比如在局域网中,回复非常快,其实就没有办法触发此算法了。而且在有些场合下需要快速的传输,也会禁止此算法。所以开发者一定要把算法的应用场景和技术内涵搞清楚,才能对相关的算法进行准确的应用,而不是自己想怎么样就怎么样。实践出真知!
2024-11-24 09:40:45 726
原创 C++网络编程之十四TIME_WAIT和CLOSE_WAIT
通过分析TIME_WAIT和CLOSE_WAIT的机制和产生的相关原因,就已经明白了二者的真正的意图和各种情况下的处理应对方式。这恰恰说明了,要想从根本上解决问题,一定要掌握问题的本质,并结合实际的应用场景有针对性的进行处理(调优)。凡事有好的一面,就会有不好的一面,这是基础的哲学问题。做为开发者要做的,就是尽量在开发的实际环境中扬长避短,解决实际问题而不是引入新的问题。一定不能学会只转移问题而不解决问题的风格!
2024-11-23 16:30:56 531
原创 redis6.0之后的多线程版本的问题
早就跟大家一起分享过,一定要抓住事物本质。针对软件就是找到其应用的目的,其核心思想是什么,而不是简单的说哪种技术好,哪种技术不好。最合适的就最好的,而这个最合适一定是随着应用的发展不断的变化的。孤立的、片面的和僵化的看问题,就很容易陷入到无何止的争论中去。教条主义、本本主义和经验主义,其实大家都犯,但一定要记得打破这层牢笼。否则,就会固步自封,难建寸功。所以科学和哲学,往往是无法分开的。这也是学习一些思想的目的和原因。
2024-11-22 21:52:49 1011
原创 跟我学C++中级篇——RAII
Resource Acquisition Is Initialization,资源获取即初始化。C/C++的开发者都知道,在这类语言的开发中,内存需要手动来控制。也就是说,释放和回收内存得开发者亲历亲为。从某种角度看,能够把控内存的细节,当然是更灵活,可如果把控的不好,却是一场灾难。根据二八定律,对于绝大多数的开发者来说,都被划分到了灾难的一个方向(即使经验丰富技术高超的开发者也难免会出问题)。那么,尤如医学上所讲,预防大于治疗。在C++中,哪些对象的生命周期是不需要自己控制而由系统自动控制呢?
2024-11-16 11:50:58 692
原创 跟我学C++中级篇——Design Patterns的通俗说法
虽然在书籍上和网上有很多设计模式的特点,比如什么面向对象编程思想,可维护可扩展等等。其实就这是前面说的,说得高大上而已。一个简单就代表了可维护性,暗含了可扩展,简单的东西本一般来说容易扩展,而复杂的东西,理解都需要很长时间,怎么容易扩展?同样,简单可重复的东西自然就灵活,其它情况也基本如此。学习,要抓住问题的本质,不是说其它的东西不重要,而是抓住本质后,再学习其它的特点,就非常容易弄明白和记清楚。
2024-11-15 22:23:28 739
原创 并行编程实战——TBB框架的应用之四Supra对CUDA的支持
通过这些年来看国外的框架和库,有一个粗浅的经验即国外一般是互相引用互相借鉴,不大怎么重复造轮子。这个在Java上非常明显,就是一引用就是一大群库或框架。或者一个框架中有一批其它的库,而其它的库又引用其它的库,C++中也是如此。国内的的相对封闭许多,大多都是自我工作,一般都是在内部引用一些库或者一些国外非常有名的库。这样说的意思是说国内的软件开发环境其实相对国外要差不少,仍然需要进一步的提高。当然,国内的开发环境也不是一天两天的原因更不是某个人某些人造成的,需要大家一起努力。
2024-11-10 11:41:37 360
原创 跟我学C++中级篇——常见的内存泄露
需要内存但无法分配出来(OOM)和内存泄露很容易混淆。但更容易让C/C++开发人员难受的是复杂的内存管理,一个不小心就可能出现泄露。很多的底层库其实也偶尔会被发现有内存泄露的现象,这说明内存泄露看上去容易控制其实在实际应用中非常复杂。不过也不用担心,内存泄露是非常容易复现的。那么解决起来,至少有个目标。
2024-11-09 09:56:29 836
原创 跟我学C++中级篇——生产中如何调试程序
调试程序并解决问题的速度和经验有相当大的关系,特别是到了具体的场景下,可能大部分情况下经验要大于技术水平。当然,二者肯定是互相影响的。所以,在生产上要想迅速的对问题程序进行调试定位,就一定要掌握好具体环境的特点和性质。其它的好的技术或方法可能在实际场景中被限制使用,所以不能教条的复用它人的经验。
2024-11-08 21:56:23 315
原创 跟我学C++中级篇——std::any的特殊用法
用std::any尽量控制应用的范围,即自己开发自己用,尽量不要向外暴露。不管是为了安全还是为易用,也是便于维护,都是一个比较好的习惯。但刀握在开发者的手里,想怎么用,还是根据自己的情况来。
2024-11-03 16:33:38 322
原创 跟我学C++中级篇——内联的语义
内联这个问题,反复分析了很多次,每次都会有新的认识。从不同的角度看这个问题,会产生不同的看法,然后与前面的角度共同结合,就会有更新的认知产生。这也是不断的对inline内联进行分析的原因。从简单入手,把薄书读厚,真正全面的掌握其内在的各种知识。这不是陷入细节,是从更严谨的视野为更高层次的抽象做准备。知行合一,与诸君共勉!
2024-11-02 12:22:16 320
原创 网络编程番外——IO多路复用的应用说明
这篇文章本来不想写的。可是,在网上经常看到有人问这个是异步还是同步,甚至有的还会因为这个互相杠。其实没有意义,是与不是,多看看源码。可能不同的版本,或者同一版本在不同的OS上,都有所不同。不必非要纠结是同步还是异步,达到目的即可。真正想明白同步异步,还是要明白适用的场景和设计的目的以及思想。不要光盯着学习资料或者书本,深入到源码中去,自然就明白了。这正是“从代码中来,到代码中去”。
2024-11-01 21:53:15 416
原创 c++应用网络编程之十三Linux下的epoll模式应用
epoll的应用,不管是库还是自己开发,基本上都是各种线程(池)应用紧密的绑定在一起。那么如何处理各种事件的实时动作以及数据和命令的快速分发解析,都是一个非常重要的问题。再加上实际场景各种情况都有可能发生,这就需要开发者能把程序设计的尽量弹性容错性高。针对epoll的缺点,增加适当的限流和控制机制,确保程序的整体的安全性。学习别人的应用,最重要是学会其设计的思想和技术实现手段。融会贯通,方能真正的把知识学到自己的头脑里,自己大脑的东西才是自己的。
2024-10-27 10:20:41 581
原创 跟我学C++中级篇——volatile的探究
当然,在不同语言或者不同的语言不同的版本或标准中(比如微软就对C++标准进行了扩展,从VC2005,volatile就支持了固定的内存序,可以安全的在多线程中使用),可能对volatile的应用进行了扩展,那就需要认真的看其的手册及相关技术指南。整体上讲,在没有确切的标准指导下,不建议对volatile进行更宽泛的使用。要严格按照标准的规定来应用,一般不会出什么大的问题。
2024-10-26 19:17:22 885
原创 跟我学C++中级篇——典型的内存问题分析
要想尽量减少内存问题,不但要有足够的知识和技术,更重要的要关于利用工具。当然,调试的水平也要不断的提高。多管齐下,才是解决问题的好办法。千万条路去罗马,总有一条适合开发者自己。
2024-10-23 13:16:03 690
原创 c++应用网络编程之十二Linux下的epoll模式分析
对于一些复杂的网络通信模型,其实仅仅明白上层的应用,是无法在实际的项目解决各种异常问题的。主动的去学习其中内在的原理并清楚运行的流程,对于解决实际问题有着非常大的帮助。这就是知其然又知其所以然的好处。与诸君共勉。建议大家手头有一份Linux内核的源码,尽量新一些!
2024-10-20 09:50:44 564 2
原创 并行编程实战——TBB框架的应用之三Supra的配置文件管理
一个好汉三个帮。完成一个并行任务,也需要一些辅助的模块共同作用。这种利用配置文件来进行节点管理的方法,虽然谈不上多新奇,但成熟可靠,正好应用在医学领域。
2024-10-19 20:09:33 359
原创 跟我学C++中级篇——优化的整体分析
再次提醒,不要轻易展开优化。特别是对于一些中小公司的开发者来说,不要迫切的想优化你的项目。可能开发者的优化并不是设计者想优化的目的。同样,技术人员的优化可能并不是市场人员的优化的目标。说来归去,实事求是的根据实际需求进行优化。盲目的优化,有可能会让你盲目。
2024-10-18 22:03:45 1049 3
原创 c++应用网络编程之十一Linux下的epoll模式基础
学习epoll可以明显看到技术栈升级的过程。这也再次证明,技术的发展,更多是在前面技术的基础上不断延革的,而技术革命本身就是一种小概率事件。技术革命更类似于基因突变,而正常的技术进步更类似于生物的自然进化。万物相同,确实如此。
2024-10-13 14:32:10 947
原创 并行编程实战——TBB框架的应用之二Supra中节点的管理
其实在研读Supra代码的过程中,最大的受益并不是TBB技术的学习,而是在设计思想上的又一次提高。对如何实事求是,因地制宜的进行技术设计有了一个更清晰的认知和验证。所以说多看代码,多分析源码,受益匪浅!
2024-10-12 18:54:51 783
原创 内存分析工具的使用——AddressSanitizer
工欲善其事,必先利其器。不是常说,某某是编程界的瑞士军刀么。其实,只要是刀,用好了都会起到事半功倍的效果。要想写出好的代码,除了有思想上的指导,在实践中熟练的应用各种开发工具也是必不可少的。
2024-10-11 22:20:07 964
原创 跟我学C++中级篇——函数调用的本质
学习编程到最后会发现,以前学到的操作系统、计算机原理和编译原理等等基础的知识,都会有机的融合到一起。这才感叹,只是为了学习的方便和条理清晰,才拆分成了不同的技术体系。其实,它们是有起承转合的互相依赖互相包容的一个整体。学习时要逐渐从点到线,再从线拉开一条面。最后在面的基础上,能形成多大的立体体系,就看个人的缘法和能力了。
2024-10-05 12:21:57 809
原创 跟我学C++中级篇——空值的定义
后发语言往往能看到借鉴语言的缺点和优点。这和学习一样,有前人的经验会进步更快。所以,从这一个小的问题,可以引申出来很广大的思考。从细节的区分到设计模式、原则和设计思想的改变。这就是老师经常说的“把薄书读厚了”。
2024-10-04 11:47:17 1060
原创 录制真人出镜视频一个简单方法
其实通过这次事件,一个小的经验就是,什么是最好?其实就是最合适。仅就这次录制视频来看,最合适就是已经有软件安装成功,不需要第三方再安装,不需要复杂的手段和方法,录制出来的视频满足需求。这就是最合适。说直白一些,就是简单、明了不用花费更多的时间,在既有的条件下成功完成相关的工作。
2024-10-03 11:48:11 675
原创 c++应用网络编程之十Linux下的Poll模式
poll模式可以理解成一个从select优化的中间状态,改进了急需改进的问题但效率并未从根本上做出革命性的提高。这就给了大牛们继续创新和研究的空间,然后就引出来了后面的epoll和io_uring。所以说,有需求就有前进的动力!
2024-10-01 19:49:52 721
原创 并行编程实战——TBB框架的应用之一Supra的基础
它是一个开源的超声实时应用软件,主要是在医学领域的超声数据的图像重建和输出,同时允许在图像数据的处理过程中对其进行完善和修改。它支持CPU和GPU两种模式,支持2D和3D图像的格式。SUPRA的整体的框架基础是在TBB的框架基础上进行设计的,它在TBB的任务、节点等抽象的层次上又进行了一次抽象的封装,让其更接近于人们的认知形态。之所以从SUPRA框架入手,最主要的就是其在设计上有机的整合了TBB框架,将业务逻辑更好的与TBB框架的设计再次抽象,在整体流程实现的过程中,实现了业务逻辑与底层技术的动态组合。
2024-09-29 14:57:18 1064
原创 github双重验证(2FA)启用方法
现在安全已经是越来越重要,深入各个方面。网络安全是一个全面的系统的问题,就从一个个的细节慢慢的补充完善吧。魔高一尺,道高一丈。反之亦然!
2024-09-28 11:32:31 3129
原创 跟我学C++中级篇——if条件语句与switch比较
在前面的一些分析介绍以及网上的资料或者书籍中,都有说过如果条件分支语句较多时,推荐使用switch而不要使用if语句,因为前者的速度比后者要快,特别是数量多时,会比较明显。但其实这句话是有问题的。在经常写类似条件语句的开发者眼中看来,可能很少考虑二者到底有什么不同,心中有一个大概的印象就可以了。真正开发时,很少有这种较真的场景。答案确实也是如此。但正因为这样,大多数的开发者往往忽略这个问题或者觉得它不值一哂。但学习的过程不能放过每一个细节,可以不对其重视,但不能不知道其所以然。
2024-09-27 22:11:19 706
原创 并行编程实战——TBB中Task Scheduler的执行
任务调度在哪儿都是一种非常让人纠结的事情。就像一个大厨,有一两个人时,饭菜就容易为所有人所表扬,可当面对上百人时,可能就有不少人给差评了。所以一个好的框架,不但要提供默认的管理调度手段,也要提供针对个性化的定制场景的接口。既要面对主流,也要取悦小众。难点,在于一个平衡!做为开发者,要从学习代码的最初的功能到学习其架构,在到其整体的设计思想,这才是最终极的目标。
2024-09-22 10:20:15 378
原创 并行编程实战——TBB中的Task Scheduler
任务调试器等于是TBB底层提供的一种基础控制流程的手段。它既是一个非常强大的应用方式,也是一种很复杂很难驾驭的任务调度方式,所以TBB的应用中,尽量还是多使用其上层封装好的相关并行算法和任务调度模板。这就和汽车一样,主流的情况下请采用自动档驾驶,但遇到一些特殊情况,可以使用手动方式进行驾驶。万物相通,道理相同!
2024-09-21 15:13:29 436
原创 c++应用网络编程之九Linux下的select模式
虽然在现代的高并发网络通信中,几乎已经看不到select模式的身影,但这并不代表着它的作用很小。正如前面反复所讲,最合适的才是最好的。一个并发量不大,安全要求又高的场景下,可能一个普通程序员用Select模式就能搞定。但非要上一些epoll之类的“高端大气上档次”的模型,未必是一件好事情。开发者习惯的东西未必是一个全面的知识,select模式既可以用在服务端也可以用在客户端,这估计让许多初学者可能跌了一下眼镜。虽然大多是在讲服务端编程时学习select模型,但这不代表着他只能应用在服务端。
2024-09-17 09:32:05 1221 2
原创 并行编程实战——TBB中的Task
从TBB框架中的任务可以瞥见一种趋势,即在设计上对底层进一步封装,特别是对一些复杂的如线程、进程以及IO的操作。尽量屏蔽与硬件结合较紧密的部分功能,从而在更高的抽象上实现对目标的解耦。而解耦的最终目的,就是让整个框架的适应性更广泛,应用更灵活。这也是做为开发者学习框架的一个重要的原因和目的。最后,学会了一定要学以致用。
2024-09-16 09:10:34 406
原创 并行编程实战——TBB中节点的数据结构
在前面分析过了节点相关的应用和功能,也在其中分析过一些节点的数据定义情况。本文就对节点的数据定义进行一个更详细具体的分析说明,特别是对一些应用上的细节展开说明一下。知其然,然后知其所以然。节点的定义,基本都是以模板进行的。所以希望大家有一些基本的模板的知识,否则看起来还是有些麻烦的。
2024-09-16 08:41:30 897
原创 git子模块处理的一些方法
用得越多,遇到的问题也越多,这就是经验的来源。经验是一个好的东西,也是一个不好的东西。它让人可以快速的处理实际问题也可以让人固化于这种思维。至于如何打破这种边界,需要自己不断的学习,与时俱进。
2024-09-14 20:25:32 377
原创 LinuxPTP的安装与应用
在实际的开发中,有时候儿需要两个设备的时钟同步,而且要求的精度相对较高。那么解决这种同步的方式有很多种,比较常见的就包括本文提到的IEEE1588标准协议。这个协议早期是在工业上应用的,后来才引入到了以太网中。在实际的开发场景中,多是在嵌入式中使用,毕竟一般也是硬件对时钟有很强的同步需求。而在更上层的软件上,一般底层做好时钟同步,而其本身只需要用就可以了。不过为了同步的快捷和方便,嵌入式中对同步往往不会是在以太网的全协议栈上进行即更多可能是在链路层等中直接进行时钟的同步(可能由硬件实现)。
2024-09-07 19:08:35 967
原创 并行编程实战——TBB中消息并行策略的控制
不同的节点有着不同的处理机制,而实际的应用场景千变万化。到达罗马的大路不止一条,何况还有小路。所以,正确的选择可能有很多,但如果寻找一条更适合当前环境的设计思路,这才是重点。最好不一定合适,合适其实从某种意义上说才是最好。
2024-09-07 09:01:30 622
原创 并行编程实战——TBB的安装
一个好的框架,必然是容易使用。不光是接口让开发者感觉良好,环境安装也要相对简单。否则除了一些技术极客对大多数开者来说,可能安装就被劝退了。这种情况还是比较常见的。比如早期的Eclipse就被后来的idea给抢占了大半的江山。而在Windows平台上,Vistual Studio一直是一座绕不过去的大山。就是因为这两者都是容易安装和使用,一般不会有什么需要具体的配置才能进行正确的进行开发。简单是永远是方向,至于简单到何种地步,就见仁见智了。
2024-09-06 21:55:43 939
原创 c++应用网络编程之八SOCKET探究
我们分析完成了一般网络通信的原理和相关的IO通信的机制,已经基本明白了网络通信到底是怎么一回事,以及其相关的难点和重点。国内的教科书往往有一个重要的问题,就是从来不连贯的讲述一个知识点,而是将这些知识点打乱并且乱序讲解。这样做很难让一个人把网络通信的相关知识融会贯通。换句话说,基本上靠自觉把相关的体系建立起来的可能性极小。这也是本系列一开篇并没有像传统的书本把网络基础知识大讲一通,然后再搞几个IO模型举几个例子,基本上这书就过去了。
2024-09-01 13:56:45 1374 3
原创 跟我学C++中级篇——并发中的锁的类型和分析
锁的底层机制就是对资源的限制性利用,在效率和安全下寻求一个平衡。无论是现实世界还是计算机世界,资源的有限性才造就了竞争,而要让资源被安全的最大化利用,就需要一种管理机制,在现实世界,就是法律和道德;在计算机世界就是锁。锁,其实就是计算机中的权力的象征!谁拥有了它,就可以自由的使用资源来工作。
2024-08-31 10:52:47 1103
大数阶乘算法的一个例子
2018-10-06
朗新WEBSERVER接口(南网和天津电网)
2009-03-16
AndroidStudio使用NDK生成静态库的方法?
2015-08-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人