golang c10k问题
不好意思,英文原文地址找不到了
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问题相关推荐
- Golang适合高并发场景的原因分析
典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力. 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存 Linux Kernel 2.6.32 x86_64 ...
- Golang 并发编程指南
分享 Golang 并发基础库,扩展以及三方库的一些常见问题.使用介绍和技巧,以及对一些并发库的选择和优化探讨. go 原生/扩展库 提倡的原则 不要通过共享内存进行通信;相反,通过通信来共享内存. ...
- 关于C10K、异步回调、协程、同步阻塞
2019独角兽企业重金招聘Python工程师标准>>> 最近到处在争论这些话题,发现很多人对一些基础的常识并不了解,在此发表一文做一下解释.此文未必能解答所有问题,各位能有一个大致的 ...
- golang高并发的理解
转载地址:https://www.cnblogs.com/feixiangmanon/p/10504081.html 前言 GO语言在WEB开发领域中的使用越来越广泛,Hired 发布的<201 ...
- Golang适合高并发场景的原理
典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存 Linux Kernel 2.6.32 x86_64 ...
- 聊聊C10K问题及解决方案
1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合.互联网还不够普及,用户也不多.一台服务器同时在线100个用户估计在当时已经算是大型应用了.所以并不存在什么C ...
- C10X:C10K、C10M
C/C++Linux服务器开发/后台架构师知识体系资料整理 C10X C10X 包括 C10K.C10M 等.C10K 问题最早由 Dan Kegel 在<The C10K problem> ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- 基于Golang的简单web服务程序开发——CloudGo
基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...
- CentOS Docker安装配置部署Golang web helloworld
目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...
最新文章
- 能赢球只拿12分也行 麦蒂明言不和姚明争老大
- Spring Boot 2.1.0 已发布,7 个重大更新!
- 桐花万里python路-高级篇-并发编程-03-线程
- IDA 7.5 Demo 包含 Windows、Linux、macOS
- 万字长文带你从零开始认识机器学习
- 你真的懂Linux吗?Linux运维从业方向与前景
- 101个著名的管理学及心理学效应(2)
- AUC评价指标的理解以及其为何能衡量二分类模型优劣——复习篇
- android hook 第三方app_Android Hook技术
- Excel表格快捷键技巧使用
- pdf怎么压缩文件到最小?pdf文件怎么变小内存?
- 峯云5G:纵论AI赋能 聚焦企业联络与协同
- 使用dd命令测试裸盘性能评测
- Cesium 生成和加载离线地形
- TypeError: AMap.MouseTool is not a constructor TypeError: AMap.MouseTool is not a constructor
- 数据库substr……in……
- 各向异性渲染(一)基础理论
- 固态硬盘和传统硬盘的区别
- 扫盲教程:单片机IIC基础通信
- MSC Marc英文界面汉化