lua mysql 死锁_GO语言信道(channel)--几种死锁情况

什么是信道

信道是go协成之间的通信管道, 所有的信道都关联了一个类型, 信道只能运输这种类型的数据, 运输其他类型的数据会报错

chan T 表示 T 类型的信道。

信道的零值为 nil。信道的零值没有什么用,通常用 make 来定义信道。例如:

a := make(chan int) 声明一个类型为int的信道,长度默认为0

信道进行发送和接收

data :=

a

信道的发送和接收默认是阻塞的, 当数据发送到信道时, 如果信道长度为0, 则会发生阻塞, 直到有其他go协程从该信道读取数据, 阻塞才会解除, 同样从信道读取数据也会发生阻塞, 例如:

package main

func main() {

a := make(chan int)

a

}

在上面程序中, 我们声明了一个长度为0的信道,  ch := make(chan type, capacity) capacity不写默认为0, 程序会在a

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan send]:

main.main()

/home/yxh/learn/go/test/hello.go:5 +0x50

但是如果改变信道的长度, 比如a := make(chan int, 1) , 程序就可以正常运行

信道死锁

当 Go 协程给一个信道发送数据时,照理说会有其他 Go 协程来接收数据。如果没有的话,程序就会在运行时触发 panic,形成死锁。

死锁的几种情况:

1.主协程读写:

package main

func main() {

a := make(chan int)

a

}

这种是最简单的死锁情况, 程序运行到a

2.主协程写, 子协程读 --- 主协程读, 子协程写

package main

func main() {

a := make(chan int)

a

go func() {

}()

}

这种情况虽然读和写不在同一个协程, 但是由于主协程在a

package main

func main() {

a := make(chan int)

go func() {

}()

a

}

调换位置后, 程序先开启子协程, 读取信道的数据, 此时子协程发生死锁, 但是这并不影响主协程的运行, 所以主协程照常运行

3.字协程读写多个信道, 顺序和主协程不一致

package main

func main() {

c1, c2 := make(chan int), make(chan int)

go func() {

}()

for {

c2

c1

}

}

上述代码中, 子协程依次读取c1, 和c2信道, 但是子协程在

死锁的情况有很多种, 这里出现的几种不是说一定会出现死锁, 有的你只要修改下信道的长度, 也许就不会发生死锁了, 发生死锁只是发生在特定情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,请允许我一一解释这些编译参数的含义。 1. --prefix=${PATH_INSTALL}/nginx 这个参数指定了 nginx 安装的路径。在这里,${PATH_INSTALL} 是一个变量,代表 nginx 安装的根目录。例如,如果 ${PATH_INSTALL} 被设置为 /usr/local,则 nginx 将会被安装到 /usr/local/nginx 目录下。 2. --user=nginx 这个参数指定了 nginx 进程运行的用户。在这里,nginx 进程将会以 nginx 用户的身份运行。 3. --group=nginx 这个参数指定了 nginx 进程运行的用户组。在这里,nginx 进程将会以 nginx 用户组的身份运行。 4. --with-http_ssl_module 这个参数启用了 nginx 的 SSL 功能,使得 nginx 能够处理 HTTPS 请求。 5. --with-http_realip_module 这个参数启用了 nginx 的真实 IP 功能,使得 nginx 能够获取客户端的真实 IP 地址。 6. --with-http_addition_module 这个参数启用了 nginx 的响应内容添加功能,使得 nginx 能够在 HTTP 响应中添加额外的内容。 7. --with-http_sub_module 这个参数启用了 nginx 的响应内容替换功能,使得 nginx 能够在 HTTP 响应中替换指定的内容。 8. --with-http_dav_module 这个参数启用了 nginx 的 WebDAV 功能,使得 nginx 能够处理 WebDAV 请求。 9. --with-http_flv_module 这个参数启用了 nginx 的 FLV 视频流功能,使得 nginx 能够处理 FLV 视频流请求。 10. --with-http_mp4_module 这个参数启用了 nginx 的 MP4 视频流功能,使得 nginx 能够处理 MP4 视频流请求。 11. --with-http_gunzip_module 这个参数启用了 nginx 的 Gzip 解压缩功能,使得 nginx 能够解压缩 Gzip 压缩的响应内容。 12. --with-http_gzip_static_module 这个参数启用了 nginx 的 Gzip 静态文件压缩功能,使得 nginx 能够对静态文件进行 Gzip 压缩。 13. --with-http_random_index_module 这个参数启用了 nginx 的随机索引功能,使得 nginx 能够在目录索引中随机显示文件。 14. --with-http_secure_link_module 这个参数启用了 nginx 的安全链接功能,使得 nginx 能够生成基于时间戳的安全链接。 15. --with-http_stub_status_module 这个参数启用了 nginx 的状态页面功能,使得 nginx 能够在浏览器中显示当前服务器的状态信息。 16. --with-http_auth_request_module 这个参数启用了 nginx 的认证请求功能,使得 nginx 能够向另一个服务器发送认证请求。 17. --with-threads 这个参数启用了 nginx 的线程池功能,使得 nginx 能够处理并发请求。 18. --with-stream 这个参数启用了 nginx 的流模块功能,使得 nginx 能够处理 TCP 和 UDP 流量。 19. --with-stream_ssl_module 这个参数启用了 nginx 的流 SSL 功能,使得 nginx 能够处理加密的 TCP 流量。 20. --with-http_slice_module 这个参数启用了 nginx 的分片功能,使得 nginx 能够将大文件分成多个小块进行传输。 21. --with-file-aio 这个参数启用了 nginx 的异步文件 I/O 功能,使得 nginx 能够异步读取文件。 22. --with-http_v2_module 这个参数启用了 nginx 的 HTTP/2 功能,使得 nginx 能够处理 HTTP/2 请求。 23. --with-pcre 这个参数启用了 PCRE 库,使得 nginx 能够使用正则表达式进行匹配操作。 24. --with-openssl=/www/server/nginx/src/openssl 这个参数指定了 OpenSSL 库的路径,使得 nginx 能够使用 OpenSSL 库进行加密操作。 25. --with-stream_ssl_preread_module 这个参数启用了 nginx 的流 SSL 预读功能,使得 nginx 能够在客户端发送 SSL 握手之前识别出 SSL 流量。 26. --with-http_image_filter_module 这个参数启用了 nginx 的图像处理功能,使得 nginx 能够处理图像文件。 27. --with-ipv6 这个参数启用了 IPv6 功能,使得 nginx 能够处理 IPv6 地址。 28. --with-ld-opt=-Wl,-E 这个参数指定了链接器的选项,使得 nginx 能够在运行时动态链接库。 29. --with-cc-opt=-Wno-error 这个参数指定了编译器的选项,禁止编译器将警告视为错误。 30. --with-ld-opt=-ljemalloc 这个参数指定了链接器的选项,使得 nginx 能够使用 jemalloc 内存分配器。 31. --add-module=/www/server/nginx/src/ngx_devel_kit 这个参数添加了一个模块,这个模块是 ngx_devel_kit,它提供了一些开发工具和库,使得开发 nginx 模块更加容易。 32. --add-module=/www/server/nginx/src/lua_nginx_module 这个参数添加了一个模块,这个模块是 lua_nginx_module,它使得 nginx 能够使用 Lua 脚本进行定制化操作。 33. --add-module=/www/server/nginx/src/ngx_cache_purge 这个参数添加了一个模块,这个模块是 ngx_cache_purge,它使得 nginx 能够手动清除缓存。 34. --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master 这个参数添加了一个模块,这个模块是 ngx_http_substitutions_filter_module-master,它使得 nginx 能够在 HTTP 响应中替换指定的内容。 以上就是这些编译参数的详细说明。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值