Java并发编程之多线程的优缺点
[TOC]
概述多线程优点方便高效的内存共享多进程下内存共享比较不便,且会抵消掉多进程编程的好处
较轻的上下文切换开销不用切换地址空间,不用更改CR3寄存器,不用清空TLB
线程上的任务执行完后自动销毁
多线程缺点开启线程需要占用一定的内存空间(默认情况下,每一个线程都占512KB)
如果开启大量的线程,会占用大量的内存空间,降低程序的性能
线程越多,cpu在调用线程上的开销就越大
程序设计更加复杂,比如线程间的通信、多线程的数据共享
归纳总结综上得出,多线程不一定能提高效率,在内存空间紧张的情况下反而是一种负担,因此在日常开发中,应尽量
不要频繁创建,销毁线程,使用线程池
减少线程间同步和通信(最为关键)
避免需要频繁共享写的数据
合理安排共享数据结构,避免伪共享(false sharing)
使用非阻塞数据结构/算法
避免可能产生可伸缩性问题的系统调用(比如mmap)
避免产生大量缺页异常,尽量使用HugePage
可以的话使用用户态轻量级线程代替内核线程
Android之dumpsys命令学习
[TOC]
概述 ADB命令之dumpsys的命令是用来查看系统服务相关信息。
adb shell dumpsys命令是用于打印出当前系统信息(更切确的说是dumpsys命令,因为adb shell只是为了进入手机或模拟器的shell内核,使其能够执行dumpsys命令),可以在命令后面加指定的service name(比如activity,location),如果不加则默认打印出设备中所有service的信息.
在adb shell dumpsys后面可添加的service name可通过adb shell dumpsys或adb shell service list方法获取.
adb shell dumpsys 输出信息的开始部分就是所有运行的service,如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777 ...
jsoncpp开源框架学习
[TOC]
概述文章参考:https://blog.csdn.net/shuiyixin/article/details/89330529
jsoncpp开源框架学习
[TOC]
概述
Eigen中四元数Quaterniond基础学习
[TOC]
概述文章参考:https://blog.csdn.net/hjwang1/article/details/106752766
四元数(Quaternions)什么是四元数呢?
文章参考:https://www.zhihu.com/tardis/zm/art/97186723?source_id=1003
四元数最早于1843年由Sir William Rowan Hamilton发明,作为复数(complex numbers)的扩展。直到1985年才由Shoemake把四元数引入到计算机图形学中。四元数在一些方面优于Euler angles(欧拉角)和matrices。任意一个三维空间中的定向(orientation,即调置朝向)都可以被表示为一个绕某个特定轴的旋转。给定旋转轴及旋转角度,很容易把其它形式的旋转表示转化为四元数或者从四元数转化为其它形式。四元数可以用于稳定的、经常性的(constant)的orientations(即旋转)插值,而这些在欧拉角中是很难实现的。
使用12345Eigen::Quaterniond q1(w, x, y, z);// 第一种方式 ...
Eigen Matrix详解
[TOC]
概述文章参考:https://blog.csdn.net/sn_gis/article/details/79015488
在Eigen中,所有的矩阵Matrix和向量Vector都是由Matrix类构造的。向量只不过是矩阵的特殊形式,只有一列(列向量)或者一行(行向量)。
模板参数Matrix 类有6个模板参数,现在我们了解前三个足够。剩下的三个参数都有默认值,后面会探讨,现在不管他。Matrix 的三个强制的模板参数:
1Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
Scalar 就是矩阵元素标量类型。
RowsAtCompileTime 和ColsAtCompileTime 分别指代编译时候的行和列值。
Eigen中提供了许多typedefs ,例如Matrix4f 是4*4的float型矩阵:
1typedef Matrix<float, 4, 4> Matrix4f;
构造函数默认的构造函数不执行任何空间分配,也不初始化矩阵的元素。
12 ...
Eigen Matrix详解
[TOC]
概述norm()对于Vector,norm返回的是向量的二范数,即
例如:
12Vector2d vec(3.0,4.0);cout << vec.norm() << endl; //输出5
对于Matrix,norm返回的是矩阵的弗罗贝尼乌斯范数(Frobenius Norm),即
例如:
Eigen Matrix详解
[TOC]
概述概述文章转自:https://tennysonsky.blog.csdn.net/article/details/73810180
protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。
由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
更多详情请看:https://developers.google.com/protocol-buffers/docs/overview(需要翻墙)
Eigen Matrix详解
[TOC]
概述概述文章参考:https://tennysonsky.blog.csdn.net/article/details/73920680
消息格式12345678syntax = "proto3"; //指定版本信息,不指定会报错message Person //message为关键字,作用为定义一种消息类型{ string name = 1; //姓名 int32 id = 2; //id string email = 3; //邮件}
消息由至少一个字段组合而成,类似于C语言中的结构体,每个字段都有一定的格式:
1数据类型 字段名称 = 唯一的编号标签值;
字段名称:protobuf建议以下划线命名而非驼峰式 唯一的编号标签:代表每个字段的一个唯一的编号标签,在同一个消息里不可以重复。这些编号标签用与在消息二进制格式中标识你的字段,并且消息一旦定义就不能更改。需要说明的是标签在1到15范围的采用一个字节进行编码,所以通常将标签1到15用于频繁发生的消息字段。编号标签大小的范 ...
Eigen Matrix详解
[TOC]
概述文章转自:https://tennysonsky.blog.csdn.net/article/details/73920767