首页 > 其他 > 详细

从系统的角度分析影响程序执行性能的因素

时间:2021-05-18 23:21:38      阅读:45      评论:0      收藏:0      [点我收藏+]

1. 精简的 Linux 系统概念模型

一个 Linux 系统主要可以划分为以下三部分:

  1. 用户空间

    • Shell

      shell 顾名思义,就是外壳的意思。好像把内核包裹起来的外壳。它是一种特殊的应用程序,俗称命令行。为了方便用户和系统交互。

    • 库函数

      库函数就是屏蔽这些复杂的底层实现细节,减轻程序员的负担,从而更加关注上层的逻辑实现。它对系统调用进行封装,提供简单的基本接口给用户,这样增强了程序的灵活性。

  2. 内核空间

    • 系统调用将 Linux 整个体系分为用户态和内核态(或者说内核空间和用户空间)。

    • 内核实现了操作系统的三大功能,即进程管理、内存管理和文件系统;

      对应操作系统原理课程中最重要的 3 个抽象概念是进程、虚拟地址和文件。

    • 驱动程序是应用软件和硬件的桥梁。

  3. 硬件空间

|---------------------------------------|
|                                       |
| Application |------------|------------|
|             |  Library   |   Shell    |
|---------------------------------------|
|             System call               |
|---------------------------------------|
|                Kernel                 |
|---------------------------------------|
|            Device Driver              |
|---------------------------------------|
|               Hardware                |
----------------------------------------|

例如当我们想在shell里打印出 "Hello World" 时,流程如下:

  • 调用 printf() 函数
  • 跟踪发现调用 write() 函数
  • 继续跟踪,发现 write() 的声明再 user.h 中,但找不到具体实现,说明是一个系统调用
  • write() 系统调用号存放在 eax 寄存器中,通过 int 进行系统调用
  • 接下来就是中断的处理过程,进入内核态。
  • 执行结束后恢复现场,回到用户态,"Hello World" 出现在 shell 中。

2. 影响应用程序性能表现的因素

以 Redis 数据库为例。

  • Redis 使用操作系统提供的虚拟内存来存储数据,如果操作系统使用交换空间,数据可能被实际保存在硬盘上。

  • Redis 支持持久化,可以把数据保存在硬盘上,但持久化也会占用一部分资源。

  • Redis 大多数时候时单线程运行,就不会受到线程同步带来的开销。

  • 虽然 Redis 是单线程的,但通过多路 I/O 复用机制 epoll ,处理客户端请求时,不会阻塞主线程。

    但 epoll 在监控的描述符状态变化很多的情况下,由于 epoll 中所有的描述符都存储在内核中,描述符的状态改变可能频繁触发系统调用,降低效率。

  • Redis 单纯执行(大多数指令)一个指令不到 1 微秒,但是,单核 CPU 一秒就能处理一百万个指令(大概对应着几十万个请求),用不着实现多线程,网络才是瓶颈。

从系统的角度分析影响程序执行性能的因素

原文:https://www.cnblogs.com/hz217/p/14782805.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!