不好意思,英文原文地址找不到了

go 内置 network poller

2002那年,Dan Kegel 提出了c10k问题。简单来说,就是在当今硬件水平下如何写出一个支持上万并发的tcp server。这个问题提出之后,出现了多线程事件循环来提高服务器性能。

多线程对调度和内存压力比较大,虽然事件循环有所缓解,但是有复杂的回调。

go继承了两者的优点。

Go 应对 c10k

在 Go中, 对文件描述符的读写系统调用同样会阻塞。当一个线程阻塞时,go 调度器会找一个空闲线程(如果没找到就spawning一个新线程)继续“服务“goroutines。

但是对于网络sockets,有可能你的所有goroutines都会阻塞等待网络IO。简单的解决方法是生成尽可能多的线程以满足goroutines的需求。通过go提供的 runtime 和 net包里内置的
network poller 可以高效地处理这种需求。

老版本的Go,network poller是一个goroutine,负责事件通知,内部使用系统kqueue或者epoll。这个goroutine通过channel通知等待中的goroutine。通过channel唤醒等待中的goroutine,避免了单个线程系统调用的开销。

当前版本的Go,network poller集成在运行中。由于运行时知道一个等待socket的goroutine何时准备好再次执行,因此可以更加及时地分配cpu资源,进而降低延时。

Goroutines和 栈空间以及 内置 network poller

goroutines提供了强大地抽象,将Go程序员从线程池和事件循环中释放出来。

goroutine的栈空间要多大有多大,不必担心分配线程栈空间或者线程池。

network poller不仅避免了烦人的回调,而且仍然利用了高效的IO完成通知机制。

Go运行时保证有足够的线程来服务所有的goroutines.

这三个特性多Go程序员来说都是透明的。

golang c10k问题相关推荐

  1. Golang适合高并发场景的原因分析

    典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力. 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存  Linux Kernel 2.6.32 x86_64  ...

  2. ​Golang 并发编程指南

    分享 Golang 并发基础库,扩展以及三方库的一些常见问题.使用介绍和技巧,以及对一些并发库的选择和优化探讨. go 原生/扩展库 提倡的原则 不要通过共享内存进行通信;相反,通过通信来共享内存. ...

  3. 关于C10K、异步回调、协程、同步阻塞

    2019独角兽企业重金招聘Python工程师标准>>> 最近到处在争论这些话题,发现很多人对一些基础的常识并不了解,在此发表一文做一下解释.此文未必能解答所有问题,各位能有一个大致的 ...

  4. golang高并发的理解

    转载地址:https://www.cnblogs.com/feixiangmanon/p/10504081.html 前言 GO语言在WEB开发领域中的使用越来越广泛,Hired 发布的<201 ...

  5. Golang适合高并发场景的原理

    典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存  Linux Kernel 2.6.32 x86_64  ...

  6. 聊聊C10K问题及解决方案

    1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合.互联网还不够普及,用户也不多.一台服务器同时在线100个用户估计在当时已经算是大型应用了.所以并不存在什么C ...

  7. C10X:C10K、C10M

    C/C++Linux服务器开发/后台架构师知识体系资料整理 C10X C10X 包括 C10K.C10M 等.C10K 问题最早由 Dan Kegel 在<The C10K problem> ...

  8. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  9. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  10. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

最新文章

  1. 能赢球只拿12分也行 麦蒂明言不和姚明争老大
  2. Spring Boot 2.1.0 已发布,7 个重大更新!
  3. 桐花万里python路-高级篇-并发编程-03-线程
  4. IDA 7.5 Demo 包含 Windows、Linux、macOS
  5. 万字长文带你从零开始认识机器学习
  6. 你真的懂Linux吗?Linux运维从业方向与前景
  7. 101个著名的管理学及心理学效应(2)
  8. AUC评价指标的理解以及其为何能衡量二分类模型优劣——复习篇
  9. android hook 第三方app_Android Hook技术
  10. Excel表格快捷键技巧使用
  11. pdf怎么压缩文件到最小?pdf文件怎么变小内存?
  12. 峯云5G:纵论AI赋能 聚焦企业联络与协同
  13. 使用dd命令测试裸盘性能评测
  14. Cesium 生成和加载离线地形
  15. TypeError: AMap.MouseTool is not a constructor TypeError: AMap.MouseTool is not a constructor
  16. 数据库substr……in……
  17. 各向异性渲染(一)基础理论
  18. 固态硬盘和传统硬盘的区别
  19. 扫盲教程:单片机IIC基础通信
  20. MSC Marc英文界面汉化

热门文章

  1. ax200蓝牙驱动linux,AX200蓝牙驱动
  2. Python 脚本查询 ip纯真数据库
  3. 操作系统学习之windows发展史
  4. Linux 设置Dlan服务器
  5. 基于神经网络的倒立摆控制系统设计
  6. 5G虚拟专网七大典型行业案例!(附下载)
  7. EditPlus3.3 集成 SVN
  8. 物联网——无线通信技术
  9. 绿竹生物冲刺港股:年期内亏损超5亿 泰格医药与北京亦庄是股东
  10. PHP生成二维码方法