C++其实是四种语言的聚合体,四种编程范式被统一到了一个编译器里,共享了很多关键词和语法。
C++ 包含了宏语言,继承自C语言的宏,但是C++又玩出了些新花样
C++包含了传统的面向过程编程,继承自C语言,扩展了一些语法,比如可以随便定义局部变量,可以函数参数重载,可以算符重载,有单行注释,是个更好用的C语言
C++包含了面向对象编程范式,有class,继承派生,有虚函数,有构造析构,这部分基本跟后来的OOP语言都差不多
C++还包含了元编程,这就是template<>这部分了,最复杂的也就是这部分,C++显然有点玩过头了,后来的语言虽然有些也支持泛型,但是都比较克制,没有C++玩得这么花哨。
当你按照四种语言分别去编写C++的时候,其实还好,但是当混合使用四种范式,玩不好就会搞出奇丑无比晦涩难懂的代码。
典型的就是STL,表面上看是元编程,但是里面也是OOP思想,代码里包含了大量宏,用来处理不同编译器开发环境的适配,应对不同编译选项需求,比如调试需求,异常处理需求等,到了实实在在的算法部分STL也不装逼了,老老实实写起了面向过程的C语言,比如std::map背后的红黑树的实现,大量的if else 和指针操作,完全就是C语言的样子。
当这四种编程范式在STL里面混合的时候,代码就看起来很丑很难懂了,好在STL本来就不是用来给人类阅读的,编译器能看懂就行。
但是有些人也许不这么想,比如:
傻瓜都会写出能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码。
-- Martin Fowler
开局一张图,剩下全靠猜?这个没法评价。
从软件的角度虽然我能想出两三种导致这个现象的原因,但非正式发布的产品出现任何问题都是常见现象。盲人摸象的评价没有必要。
跟11代没差别,这个肯定是违背常识的,要知道11代i9只有16线程,12代i9有24线程,24线程超越16线程并不需要多么高超的优化技巧。
调度优化的主要难题是当我们只需要少量线程运作的时候究竟把这个线程安排在哪个核心。
然而,对于全核心全线程同时计算的场景来说,反正都是全核心上场,根本不需要什么优化,谁来都是全核心工作。
如果这个软件能把所有核心用满的话,没道理性能不变。所以肯定有某个环节出了问题。正式版本再说吧。