当前位置: 首页 > wzjs >正文

网站3d展示怎么做的专门制作小程序的公司

网站3d展示怎么做的,专门制作小程序的公司,珠海 电商 网站建设,平台建站建设背景:程序退出发现被强制退出,而不是正常的退出。正常退出是发送15信号,而异常退出是发送信号9,强制退出。退出机制是先发送信号15,然后6s内没有退出完成,会发送信号9。通过查看退出流程,是将初…

背景:程序退出发现被强制退出,而不是正常的退出。正常退出是发送15信号,而异常退出是发送信号9,强制退出。退出机制是先发送信号15,然后6s内没有退出完成,会发送信号9。通过查看退出流程,是将初始化申请的内存,资源全部释放掉。最后通过exit退出。通过加打印看到exit退出耗时高。去查看退出函数还有_exit退出耗时底。
原因是exit退出会先进入清理注册回调,刷新打开的文件缓冲区,关闭打开的文件描述符,最后调用_exit退出。_exit是直接退出。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/wait.h>#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>long long get_time_us() {struct timeval tv;gettimeofday(&tv, NULL);return tv.tv_sec * 1000000LL + tv.tv_usec;
}
// 清理函数
void cleanup() {printf("Cleanup function called.\n");
}// 测试 exit() 的耗时
void test_exit() {long long start;// 注册清理函数atexit(cleanup);printf("Testing exit()...\n");start = get_time_us();printf("This is a test for exit().\n"); // 输出到缓冲区fflush(stdout); // 确保缓冲区刷新exit(0); // 调用 exit(),会刷新缓冲区并执行清理
}// 测试 _exit() 的耗时
void test__exit() {long long start;printf("Testing _exit()...\n");start = get_time_us();printf("This is a test for _exit().\n"); // 输出到缓冲区_exit(0); // 调用 _exit(),不会刷新缓冲区,也不会执行清理
}int main() {pid_t pid;int status;long long start, end;// 测试 exit()printf("Starting exit() test...\n");start = get_time_us();pid = fork();if (pid == 0) {test_exit(); // 子进程调用 exit()} else {waitpid(pid, &status, 0); // 等待子进程退出end = get_time_us();printf("Time taken by exit(): %lld us\n", end - start);}// 测试 _exit()printf("Starting _exit() test...\n");start = get_time_us();pid = fork();if (pid == 0) {test__exit(); // 子进程调用 _exit()} else {waitpid(pid, &status, 0); // 等待子进程退出end = get_time_us();printf("Time taken by _exit(): %lld us\n", end - start);}return 0;
}/*
环境:https://www.onlinegdb.com/
Starting exit() test...
Testing exit()...
This is a test for exit().
Cleanup function called.
Time taken by exit(): 276 us
Starting _exit() test...
Testing _exit()...
This is a test for _exit().
Time taken by _exit(): 182 us`_exit()` 比 `exit()` 耗时低的原因在于它们的功能和执行过程不同:*/

_exit()exit() 耗时低的原因在于它们的功能和执行过程不同:


1. exit() 的行为

  • 清理工作
    • 调用所有通过 atexit() 注册的清理函数(如 cleanup())。
    • 刷新所有打开的文件缓冲区(确保缓冲区中的数据写入文件)。
    • 关闭所有打开的文件描述符。
  • 系统调用
    • 在完成上述清理工作后,exit() 最终会调用 _exit() 来终止进程。

由于 exit() 需要执行额外的清理工作,因此耗时更长。


2. _exit() 的行为

  • 直接终止
    • _exit() 是一个系统调用,它直接终止进程。
    • 不执行任何清理工作:
      • 不调用通过 atexit() 注册的清理函数。
      • 不刷新文件缓冲区。
      • 不关闭文件描述符。
  • 更快
    • 因为 _exit() 跳过了所有清理步骤,直接让操作系统回收资源,所以执行速度更快。

3. 实验结果分析

在您的实验中:

  • exit() 耗时:276 微秒。
  • _exit() 耗时:182 微秒。

这表明 exit() 的清理工作(如调用 cleanup() 和刷新缓冲区)增加了额外的时间开销。


4. 影响耗时的因素

以下因素可能会影响 exit()_exit() 的耗时差异:

  1. 清理函数的复杂度
    • 如果通过 atexit() 注册了多个清理函数,exit() 的耗时会进一步增加。
  2. 文件缓冲区大小
    • 如果有大量数据需要刷新到文件,exit() 的耗时会显著增加。
  3. 系统性能
    • 系统的 I/O 性能和进程管理效率也会影响耗时。

5. 总结

  • exit():因为它执行了清理工作(如调用清理函数和刷新缓冲区)。
  • _exit():因为它直接终止进程,跳过了所有清理步骤。
  • 在子进程中,通常推荐使用 _exit(),以避免重复清理父进程的资源。
http://www.dtcms.com/wzjs/90790.html

相关文章:

  • 网站建设广告素材推广策略有哪些方法
  • php网站api接口写法百度收录排名查询
  • 什么网站排名做的最好杭州云优化信息技术有限公司
  • 值得浏览的国外网站简单制作html静态网页
  • 接单做效果图网站广告策划书
  • 豆各庄做网站的公司2345网址中国最好
  • 怎么自己做网站备案seo优化关键词是什么意思
  • 北京网站建设怎么样长沙靠谱关键词优化公司电话
  • 网站做造价如何推广软件
  • o2o平台网站开发app推广渠道
  • 翔安建设局网站营销软文范文200字
  • 山东省建设局网站首页一个网站的seo优化有哪些
  • 做天猫转让网站百度seo排名优化公司推荐
  • oss做网站迁移平台接广告在哪里接的
  • 为什么要进行网站建设外贸网站建站
  • 常州建设网站公司建网站找哪个平台好呢
  • 宝鸡外贸网站建设太原seo排名收费
  • 原创先锋 北京网站建设seo查询是什么意思
  • 北京食药局网站年检怎么做宁波网站关键词优化代码
  • 旅游网站哪个好宁波seo哪家好
  • 自己怎么给网站做优化云优化软件
  • 公司网站开发的国内外研究现状精准引流获客软件
  • 做网站 如何 挣钱百度推广代理怎么加盟
  • 网站首页优化人工智能培训师
  • 360浏览器免费看视频seo短视频
  • 环球资源网官网绍兴seo计费管理
  • 化妆品网站建设的设计思路青岛网络工程优化
  • 伊犁园xyz视频人入口企业网站如何优化
  • 服饰网站模板百度网页版官网
  • 网站详情页设计今日新闻大事件