go为什么能做到高并发

goroutine是Go并行设计的核心。goroutine说到底其实就是协程,但是它比线程更小,几十个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。 (推荐学习:go)

执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。

goroutine比thread更易用、更高效、更轻便。

一些高并发的处理方案基本都是使用协程,openresty也是利用lua语言的协程做到了高并发的处理能力,PHP的高性能框架Swoole目前也在使用PHP的协程。

协程更轻量,占用内存更小,这是它能做到高并发的前提。

go web开发中怎么做到高并发的能力

学习go的HTTP代码。先创建一个简单的web服务。

package mainimport (    "fmt"    "log"    "net/http")func response(w http.ResponseWriter, r *http.Request) {    fmt.Fprintf(w, "Hello world!") //这个写入到w的是输出到客户端的}func main() {    http.HandleFunc("/", response)    err := http.ListenAndServe(":9000", nil)    if err != nil {        log.Fatal("ListenAndServe: ", err)    }}

然后编译

go build -o test_web.gobin./test_web.gobin

然后访问

curl 127.0.0.1:9000Hello world!

更多相关文章

  1. golang中协程和线程的区别是什么?
  2. golang 内存泄露的原因
  3. golang 管道线程安全吗
  4. golang 协程占多大内存
  5. Go语言的内存模型介绍
  6. golang是多线程模式吗?
  7. golang如何释放map内存?
  8. 深入SQLite多线程的使用总结详解
  9. 从XML中读取数据到内存的实例

随机推荐

  1. HotSpot VM 中对象的内存分析
  2. 刷完 557 道 Java 面试题的一些感触
  3. 解 30 道 MyBatis 面试题(3)
  4. 开启 GC 日志
  5. 2: Zabbix5.0使用钉钉机器人报警
  6. 内存溢出复现(OutOfMemory)
  7. Nacos单机部署
  8. MyBatis 延迟加载、一二级缓存、架构设计
  9. HotSpot 内存分配的主要规则
  10. 我与 Java 的七年之痒