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

【go】程序启动时发生了什么?为什么选择go语言开发,优势劣势

go程序运行主要发生了什么?

可以分三个阶段回答:操作系统的处理阶段,runtime运行时处理阶段,用户代码执行阶段

  • 操作系统处理阶段:
    • 加载可执行文件到内存
    • 设置堆栈
    • 加载环境变量
    • 创建线程
  • runtime运行时处理阶段:
    • 初始协程栈,大小2kb,动态扩容
    • 划分内存区域(arena、bitmap、spans)
    • 启动GC
    • GMP调度器初始化
  • 用户代码
    • 针对导入的包,进一步深入到调用的最底层
      执行该包的init(),然后跳回上一层,执行init,
      直到回到主函数的init执行后,执行main
    • 如果main里有新的协程创建,那么交由GMP调度器管理
    • 程序退出时,执行所有defer函数,然后退出

为什么学go?优势,劣势?

  • 为什么学?语法简单清晰,执行高效
  • go优势
    • 通过goroutine协程和channl管道,支持原生高并发
    • 接近C语言的性能,但是语法更简单
    • 开发效率高,相对于java历史遗留问题没那么多,毕竟是新时代后端开发语言
    • Docker,k8s,普罗米修斯都是go写的,云原生生态好
  • go劣势
    • 错误处理比较冗长,有很多重复代码
    • 相较于java比较年轻,生态库没有java丰富
    • GC垃圾回收在极高性能要求场景有延迟问题

https://github.com/0voice

相关文章:

  • 如何优化 MySQL 存储过程的性能?
  • 历史数据分析——宁波港
  • 【Python】【电网规划】基于经济与可靠性双目标的混合配电系统规划及可靠性评估
  • 主从复制启动
  • 如何设计Agent的记忆系统
  • docker commit除了提交容器成镜像,还能搞什么之修改cmd命令
  • 怎么开发一个网络协议模块(C语言框架)之(二) 数据结构设计
  • 稳固基石 - Prometheus 与 Alertmanager 运维考量
  • STM32中断优先级分组有哪几种?
  • Java中使用Stream API优化for循环
  • ELF格式·链接与加载
  • 网络协议与通信安全
  • Spring MVC深度解析:控制器与视图解析及RESTful API设计最佳实践
  • Linux常用下载资源命令
  • 互联网大厂Java求职面试实录 —— 严肃面试官遇到搞笑水货程序员
  • 动态IP:像变色龙一样自由切换网络身份
  • 深度学习实战:从图像分类到文本生成的完整案例解析
  • python项目和依赖管理工具uv简介
  • 行为型:迭代器模式
  • 为什么Python慢?如何用Numba实现Python百倍加速?
  • 免费网络咨询免费建站/自动点击竞价广告软件
  • 潍坊市做网站/seo工作职责
  • 建设电商网站/如何在百度发广告推广
  • 机械加工网入网/网站seo报价
  • flash 如何做游戏下载网站/创意设计
  • 怎样开发一个网站/steam交易链接怎么用