我们知道当我们编译并生成一个exe程序时,要运行此exe程序,需要将编译过程中依赖的链接库dll文件都放到附近才可以。
如果我们将这些库目录加入环境变量后,那么运行exe时系统会自动到环境变量查找,查找到就可以在执行时,随时加载(这就是环境变量的作用)。
项目中配置opencv最好是用宏来配置,这样即便opencv安装路径变了,依然有效。
动态库编译时的lib又称为导入库lib,这个导入库和静态lib是不一样的;
- 用静态库lib编译生成exe时,需要包含头文件告诉编译器我的库大概的样子,还需要静态库lib,会将所有的lib打包进exe,这样exe会很大,而且后期更新要重新编译生成exe。
- 用动态库编译生成exe时,也需要包含头文件告诉编译器我的库大概的样子,还需要导入库lib在链接时告诉编译器我的函数的位置,最终编译成exe后,dll不在其中,导入库lib被导入了exe,因此在exe运行时不再需要导入库了。
线程和cpu的关系:
多线程就是将一个cpu核心模拟出多个核心的效果,线程数大于等于cpu核心数。
多线程对于并发的处理有实际意义,比如并发请求为200时,一个4核的cpu可以通过intel的超线程技术将每个cpu核做成50个线程,模拟50个cpu核心的效果,来应对并发。(多线程仅支持intel的cpu。)
即:在不超线程的前提下,只要核心数大于1,就可以做到进程的并行.(如果只有单核心,在可以超线程的前提下,也可以做到进程级的并行)
并行:是真正的同时执行
并发:表象上做到,不是真正的同时执行.----时间轮转
平时我们关注的是(物理或逻辑)核心总数, 而不是cpu数目(一般的pc只有一个物理cpu).
(核心是对以前单核cpu时代的cpu抽象)
CPU 物理核心数 = 物理 CPU 个数 X 每颗物理 CPU 的核数
CPU 逻辑核心数 = 物理 CPU 个数 X 每颗物理 CPU 的核数 X 超线程数 (逻辑核心就是指物理核心通过超线程技术抽象扩增的结果,只有intel系列才具有超线程技术)
因为在不超线程的情形下, 单物理核心的CPU电脑同一时间内只能执行一个线程; 平常说的这个 机器几线程 就是指 机器可以同时运行的最大线程数目, 即逻辑核心总数.
比如我们说笔记本计算机cpu是6核12线程的,意思是1个物理cpu(插槽1 ) 共有6个物理核心总数(内核),12个逻辑处理器总数(逻辑内核); 每个物理核心通过超线程技术抽象成2个逻辑处理器.
笔记本上设备管理器显示的是逻辑核心(逻辑处理器)总数
cpu主要生产商有intel(80%市场份额)---美国, AMD----美国等 意味着大部分你见到的cpu都支持超线程.