系统性能常见问题

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性能问题

C#程序员经常用到的10个实用代码片段 - 操作系统

在 VS2010 中使用 Nvidia NSight 进行 CUDA 性能分析 - 时间线上的片段

具有相同功能的活动和片段

C# Cache的一些总结