系统性能常见问题
Posted doupi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统性能常见问题相关的知识,希望对你有一定的参考价值。
1.多进程和多线程实现并发编程各自的优劣势是什么?
切换成本不一样,多进程的优势是一个进程挂了不会影响其他的进程,因为内存地址不一样,劣势是独立的地址空间通信比较复杂,一般使用socket编程,而多线程直接在内存中通信
2.协程为什么能实现更高的并发?
- 切换速度快,进程和线程上下文切换需要进入内核态,而协程可以直接在用户态进行切换
- 异步非阻塞编程,使用线程的时候一般都是同步阻塞socket或者IO,如果没有完成任务,就会让线程sleep
- 一个协程所占用的内存非常小,一般只有十几K或者几十K
3.下面两种访问数组的方式哪种更快,为什么?
#方式一
for(i=0;i++;i<n) for(j=0;j++;j<n) array[i][j]
#方式二
for(i=0;i++;i<n) for(j=0;j++;j<n) array[j][i]
二维数组在绝大多数内存中都是按行存储的,例如n=5
方式一
array[0][0] | array[0][1] | array[0][2] | array[0][3] | array[0][4] |
array[1][0] | array[1][1] | array[1][2] | array[1][3] | array[1][4] |
array[2][0] | array[2][1] | array[2][2] | array[2][3] | array[2][4] |
array[3][0] | array[3][1] | array[3][2] | array[3][3] | array[3][4] |
array[4][0] | array[4][1] | array[4][2] | array[4][3] | array[4][4] |
方式二
array[0][0] | array[1][0] | array[2][0] | array[3][0] | array[4][0] |
array[0][1] | array[0][1] | array[0][1] | array[0][1] | array[0][1] |
array[0][2] | array[1][2] | array[2][2] | array[3][2] | array[4][2] |
array[0][3] | array[1][3] | array[2][3] | array[3][3] | array[4][3] |
array[0][4] | array[1][4] | array[2][4] | array[3][4] | array[4][4] |
5.哈希表和二叉查找树相比,各自的优缺点
6.解决哈希表冲突有哪些方法,各自的优缺点是什么?
7.自旋锁有什么特点?不适合用在哪些场景?
8.读写锁用于解决什么问题?读优先和写优先指什么?
9.怎么快速将文件发给客户端?
10.相比堆,为什么栈上分配对象的速度更快?
以上是关于系统性能常见问题的主要内容,如果未能解决你的问题,请参考以下文章
为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?
Xamarin.Android WebView App性能问题