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

怎么把自己的网站放到百度上/营销策略有哪些理论

怎么把自己的网站放到百度上,营销策略有哪些理论,flash网站源码,网站的费用可以做无形资产吗转载于公众号:灰子学技术原文链接:https://mp.weixin.qq.com/s/nJRVbhRQCgWHR1eHSfBpFA一、前言介绍:对于Go语言并发通讯,是使用的协程goroutine,而协程之间的通讯采用的是channel。但是channel不管是有缓存的&#xf…
转载于公众号:灰子学技术
原文链接:https://mp.weixin.qq.com/s/nJRVbhRQCgWHR1eHSfBpFA

一、前言介绍:

对于Go语言并发通讯,是使用的协程goroutine,而协程之间的通讯采用的是channel。但是channel不管是有缓存的,还是无缓存的都会有阻塞的情况出现,只不过无缓存的阻塞会更加频繁。而协程长时间阻塞了之后,Go语言本身又没有提供这种超时的解决机制,所以开发者需要自己考虑实现这种超时机制。这种超时机制在Go语言中则是使用select来解决的。

相关的背景知识:

1.Go语言并发篇(一):之go语句篇:https://mp.weixin.qq.com/s/FD-MP9r5sEn1QYRAYZE_4g
2.Go语言之goroutine的调度原理: https://mp.weixin.qq.com/s/hTgIyJN7p-wrDfLj1bP1wQ
3.Go并发之channel篇:https://mp.weixin.qq.com/s/PIb-gGBootc6581pHhi5ew

二、Select内容介绍

我们先来看几个问题, select是什么?它都有那些特性?

语法定义:
select是Go语言中的一个控制语句,它有select,case, default共同构成,与switch的书写方式类似。
select只用来操作的channel的读写操作。
(备注:golang 的 select 本质上,就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。也是常用的多路复用的一种,例如poll, epoll(这个会在另外一个帖子中介绍), select )

例子:

e9fb7bfa1882f0cabab62bcdc11e4788.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png
select 的特性:
1. 如果只有一个 case 语句评估通过,那么就执行这个case里的语句
2. 如果有多个 case 语句评估通过,那么通过伪随机的方式随机选一个
3.如果 default 外的 case 语句都没有通过评估,那么执行 default 里的语句
4.如果没有 default,那么 代码块会被阻塞,直到有一个 case 通过评估;否则一直阻塞

特性1: select正常case能够评估通过的例子:

92fa903fbe9f4d6a9eaa2e09f45c4277.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

特性4: 没有default分支,select被阻塞住的例子:

0a4d620cd74aa4869576be092fa61e40.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

对比特性1,会发现,select在探测不到case是接收c1数据的情况下,会阻塞在哪里,不会打印"go end!"

特性3: 有default的例子:

e77ed88fa1b063ad8d73798e95e4e485.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

select存在default的话,在case不命中的情况下,会直接进入default分支,协程一样会结束,不会阻塞住。

特性2: 多个case 同时满足的情况,会随机选择一个case

2c7a94ffac254dac2d8795b44bda843e.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

​通过输出我们可以看出来,尽管channel c1和c2基本是同时写的数据到channel中,但是select选择了c2,忽略了c1。

三、select的应用场景

在看完了select的特性之后,笔者知道了channel的使用方式。可是到底什么时候使用select呢?于是笔者便问了自己另外一个问题。

select的应用场景都有那些,为什么我们需要select?

场景一:实现非阻塞读写操作。

根据select的特性3(如果 default 外的 case 语句都没有通过评估,那么执行 default 里的语句), 我们可以实现非阻塞的读写操作。

这种情况,一般是发生在服务器在给用户推送数据之后,不希望用户一直阻塞在读操作上面。代码实例参考特性3的例子,我们利用default来跳过这个阻塞过程。

场景二: 为请求设置超时时间。

这一个场景也就是前言介绍里面提到的协程通讯时候,长时间收不到读写操作,导致协程一直被阻塞的情况,而超时机制则是一个很常规的操作。我们来看下例子:

1.复现channel阻塞的例子:

9ba43963017396229ec191f7fee90e44.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

​2.超时处理的例子:

cbc2a931a0fa0269ea96640a5a1505b8.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

​例子1,因为channel中没有数据可读,导致协程一直阻塞住,并没有go end的日志打印出来。

例子2, 虽然channel 中依然没有数据可读,但是我们实现了超时机制,在2s超时之后,select会触发超时相关的channel,进而结束协程go的阻塞,打印出go end日志。

场景三: 调度协程,控制其他协程的退出或者完成

在并发程序中,通常 main goroutine 将任务分给其它 goroutine 去完成,而自身只是起到调度作用。这种情况下,main goroutine无法知道 其它goroutine 任务是否完成,此时我们需要 done channel来协助完成。

例子为:

不实用done channel的方式,会发现main的goroutinue并不会等待其他的goroutine结束之后,才结束,也不知道其他的goroutiue何时结束。

33f3d8acad92fca0dd4f0860e22a92f2.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

添加了done channel之后,main goroutinue可以等待其他的goroutinue结束之后,再结束。

f10f4fc1cf014e5fbb612d486d90d468.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

备注:对于select的实现机制,这个在后面的文章中介绍。

Go Channel 详解: https://colobu.com/2016/04/14/Golang-Channels/

Go语言并发模型:使用 select:https://segmentfault.com/a/1190000006815341

灰子学技术,欢迎关注,点评,相互学习。

63b573aaa050fd633b5c416e03563e28.png

517d2a5c1707cdc6e9e9004a9cbe5bc7.png

http://www.jmfq.cn/news/4962133.html

相关文章:

  • 移动互联网开发技术是什么/站长工具seo综合查询引流
  • 公司网站登陆后台管理中心不能修改前台主页/百度seo查询
  • 西安网站推广公司电话/百度统计流量研究院
  • 做商城网站要什么证件/seo排名优化软件有用吗
  • 教育行业网站制作/重庆网站到首页排名
  • 以绿色为主的网站/上海何鹏seo
  • 网站建设怎么管理业务员/网站结构优化的内容和方法
  • 企业网站管理系统免费/优化推广公司哪家好
  • 辽宁省建设安全监督网网站/seo网站推广如何做
  • 南京专业网站营销/北京网站优化外包
  • 大连鼎信网站建设公司/网站建设需要多少钱
  • 全国做网站的/简述seo的基本步骤
  • 最好的科技资讯网站/企业网站推广渠道有哪些
  • 淄博哪个网站做房屋出赁好/精准防控高效处置
  • 网站备案密码使用/搜索引擎营销分析
  • 租办公室/重庆seo技术教程博客
  • 怎么在南京人社网站做失业登记/南宁 百度网盘
  • 上海 网站建设/哪里做网络推广好
  • 网站首页设置伪静态/网络营销的成功案例有哪些
  • 网站建设 有限公司/自动外链发布工具
  • 杭州的电商网站建设/恢复正常百度
  • go做网站/怎么做产品推广和宣传
  • 网站的互动功能/360手机助手
  • 网站设计与网页制作招聘/长沙网站seo源头厂家
  • 自己做网站的难度/网络营销策划书包括哪些内容
  • wordpress站内计费搜索/百度关键词价格
  • 客服24小时在线服务/我赢seo
  • 潍坊做网站建设的公司/百度账户登录
  • 做编程的 网站/磁力搜索引擎哪个好
  • 网站运营工作/网站搭建源码