随笔分类 - 读书笔记
主要是针对自己阅读的书籍的评价和内容分析,积累、记录
摘要:0. 小工具 npm: node第三方库管理工具,用来获取第三方包、升级、删除或发布编写的包。 nvm: node的多版本管理工具。 supervisor:监视你对代码的改动,重启当前执行的js文件,一般用在网站、web开发以实时修改并观察结果便于调试。 1. 事件 events内置模块,可注册事件监听器、触发指定的事件信号和相应的事件处理。 ...
阅读全文
摘要:23. Object对象 构造函数的参数若为对象,则返回原参数对象,指向同一个对象的引用(可基于此判断一个参数变量是否为对象即value===Object(value)); 构造函数的参数为原始数据类型,则返回包装后的对象。如Number、Boolean、String等,其中无参或参数为undefined或null均返回一个空对象。 添加新方法: 1. 通...
阅读全文
摘要:19. 运算符 加法运算符+: 1. 若运算子是对象,则自动转成原始类型值;此过程中先执行该对象的valueOf方法,若仍然 不是原始数据类型值,则再执行toString方法,若对象是Date实例,则执行toString方法。 2. 两个运算子都是原始类型的数据后,只要有一个为字符串,则运算子会转为字符串后执行字符串 的连接...
阅读全文
摘要:0. 语句 语句以";"结尾,但也可以省略,引擎解析器会自动添加必要的分号,不过此可能导致引入BUG。 1. 变量提升 因JavaScript引擎的工作方式,先解析代码,然后获取所有被声明的变量,然后再一行一行地运行; 在获取所有变量的声明时,变量声明类似于会被提升到代码的头部的操作。 例如: console.log(a); va...
阅读全文
摘要:软件优化的必要性; 1. 优化为软件开发的一部分 2. 优化是高效的且可持续的 3. 软件的活力、生命周期的延续 改善代码性能的一些策略: 1. 使用更好的编译器以及编译选项 2. 使用最优算法 3. 使用更好的库并用好库 4. 减少内存分配和复制操作 5. 移除不必要的计算操作,优化热点代码 6. 使用最优的数据结构 7. 提高并发性以更快地处理 8. 优化内存管理 影响优化的计算机的行为...
阅读全文
摘要:在线程间划分工作的技术: 划分数据的方式:得到最优性能在很大程度上决定于数据结构的细节; 1、开始处理前的预先划分,最简单的做法便是划分数据给不同的工作任务, 也即将一个任务划分为多个并行的任务集,工作的线程独立运行这些任务,并在后期的化简步骤中合并结果。 2、递归地划分数据,避免产生过多的线程,但是线程间通信可能会带来复杂性。 划分任务...
阅读全文
摘要:无锁数据结构: 不使用锁就能实现安全并发地存取的数据结构,可避免数据竞争、死锁、或锁引起性能限制等,以实现最大程度的提高并发性。 设计正确的无锁或无等待的数据结构是比较困难的,若确定需要无锁的情况下产生的收益高于代价时才应考虑(这个需要在多各方面考虑)。 无锁数据结构优缺点: 优点: 1. 最大限度的提高并发性,减少了线程等待的时间; 2. 提高健壮性,避免锁机制引入可能导致的数据结构损坏。 缺点
阅读全文
摘要:数据结构: 作为程序设计问题中的关键部分,并行程序设计问题也需要处理数据结构,数据结构本身要么不需要同步,要么通过同步机制来保障如互斥体、锁等; 并发设计含义: 多个线程可同时使用此数据结构且执行相同或不同的操作,满足每个线程针对数据结构有一致性的视图,不会破坏或者丢失数据等竞争条件,则为线程安全的。 数据结构的操作接口中若抛出了异常,但并没有修改数据结构,则认为是异常...
阅读全文
摘要:内存模型: C++内存位置布局,参见struct结构体/class类成员/全局、静态变量在内存中的布局。 多个线程修改某位置的值,应按照某个顺序修改或者读取,否则可能出现数据竞争或未定义行为。 原子操作: 类似于事务操作,对对象值的修改或者读取都是原子的,不会出现修改部分或读取到失效值的情况。 标准原子类型std::atomic模板类型,提供了多个内置类型的特化...
阅读全文
摘要:等待事件: 条件变量等待: std::condition_variable/std::condition_variable_any,前者配合std::mutex以及std::unique_lock、std::lock_guard, 后者可配合类似互斥体(包括互斥体)的类型工作,不过因其内部持有std::mutex对象成员的锁保护,性能和大小上会有一定的代价。 ...
阅读全文
摘要:竞争条件: 进程中各个线程可共享数据,既是优点也是缺点,而导致不同线程操作数据出现异常的情况时,竞争条件是其中之一。 避免竞争条件: 一:采用保护机制,封装正在修改的或访问的数据结构,确保其他线程在共享数据被修改前或修改后才可见可访问。 二:修改数据结构设计、或者使用不变量,如无锁编程(无锁数据结构等)。 互斥体保护: 互斥体作为同步原语,可确保一个线...
阅读全文
摘要:等待线程完成: join;只可调用一次,此外最好在调用之前调用joinable测试是否可调用;此外调用join后线程已不可用,joinable将fanhuifalse。 分离线程: detach:一般作为后台运行的线程,有时候还是有用的。但需要处理好线程所持有的资源、生命周期的问题,可以使用长生命周期的资源 或者拷贝一份资源到该线程的堆栈里而不是共享使用资源。调用detach后线程执行与线程对象将
阅读全文
摘要:何为并发: 两个或者多个独立活动同时发生,对于单核心的任务切换也认为是并发。 目前真正有意义的是硬件并发,对于多核心多线程的任务,并发程度取决于可用的硬件并发。 任务切换存在一定的上下文切换开销,以保存当前CPU状态、PC、指令等, 同样的切换回另个任务时需要重新加载早期的处理状态、内存载入缓存等。 另外并发和并行也存在一定的差异。 并发方式: 多进程并发:进程间独立执行任务,且通过进程间通信传递
阅读全文
摘要:1. 计算存储和处理的信息以01二进制信号表示。 2. 计算针对较小范围的整数是精确表示的,而对浮点数则是近似表示的。 3. 整数计算溢出,不因交换律、结合律而改变该溢出后的值,浮点运算溢出则正负号始终保持。 4. 计算机信息的存储:8位的块(即字节)作为最小可寻址的内存单位。二进制、十六进制、十进
阅读全文
摘要:这一章节主要从整体上粗略地介绍了该书中涉及到的知识如以下几点: 1、信息的存储:比特串位; 2、C程序编译过程: 1) 源码(.c)经过预处理器得到修改后的文件(.i)(主要是扩展include或者宏替换等); 2) .i文件再经过编译器编译为汇编文件(.s); 3) .s汇编文件通过汇编器编译为目
阅读全文
摘要:《深度探索c++对象模型》这本书是我工作一段时间后想更深入了解C++的底层实现知识,如内存布局、模型、内存大小、继承、虚函数表等而阅读的;此外在很多面试或者工作中,对底层的知识的足够了解也是非常有帮助的; 对于需要深入C/C++语言、更好的掌握该语言,《深度探索c++对象模型》这本书一定是必读之一,
阅读全文
摘要:《深入理解计算机系统》第三版刚出来不到一周,便买下了这本书;之所以阅读本书,一方面源于网友推荐以及豆瓣不错的评分、评价;另一方面是针对本人非科班出身,计算机系统相关的知识相对比较薄弱,很多情况下此类知识需要工作之外的时间自学、补涨此类知识,而该书从程序员的角度进行阐述、展示了计算机系统的各个层面的知
阅读全文