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

内蒙古建设厅公示网站简单的网站构建的基本流程

内蒙古建设厅公示网站,简单的网站构建的基本流程,c2c模式成功案例分析,网络营销公司招聘作为学Go的菜鸟#xff0c;之前我以为这两个应该是同一个东西#xff0c;以为无缓冲通道是缓冲通道容量为1的一种特殊情况。然鹅#xff0c;这俩货根本不是同一个东西。 无缓冲通道 无缓冲通道也称为同步通道#xff0c;发送操作会阻塞#xff0c;直到另一个 goroutine …作为学Go的菜鸟之前我以为这两个应该是同一个东西以为无缓冲通道是缓冲通道容量为1的一种特殊情况。然鹅这俩货根本不是同一个东西。 无缓冲通道 无缓冲通道也称为同步通道发送操作会阻塞直到另一个 goroutine 在对应通道执行接收操作。 在单线程中往无缓冲通道写入数据是会造成死锁的。 这里的A或B无论谁先执行谁都会阻塞以等待另一个goroutine执行也就是说往里写得等来读的从里读得等来写的。最重要的是A和B对s1的读写是同步的直观的理解是A和B对s1的读写是同时发生的当A对s1写完了则B从s1中就读完了。这样的特性可以用于做并发单位之间的同步操作如果在A和B中对同一个无缓冲通道进行了读写那么A和B一定会在读写的地方进行同步谁先到谁阻塞等待另外一个。 package mainfunc main() {s1 : make(chan int)s1 - 1 // A fatal error: all goroutines are asleep - deadlock!fmt.Println(-s1) // B fatal error: all goroutines are asleep - deadlock! }这里以一个具体的示例来表现无缓冲通道的用法和特性。使用 WaitGroup 避免主线程提前结束。 package mainimport (fmtsynctime )const Interval 5func main() {fmt.Printf(%s: main thread start\n, time.Now().Format(2006-01-02 15:04:05))naturals : make(chan int)var wg sync.WaitGroup// putwg.Add(1)go func() {defer wg.Done()for x : 0; x Interval; x {naturals - xfmt.Printf(%s: put %d \n, time.Now().Format(2006-01-02 15:04:05), x)time.Sleep(time.Duration(x1) * time.Second)}close(naturals)}()time.Sleep(Interval * time.Second) // wait sometime for writing// getwg.Add(1)go func() {defer wg.Done()for {x, ok : -naturalsif !ok {fmt.Printf(%s: break, time.Now().Format(2006-01-02 15:04:05))break // 通道关闭且读完}fmt.Printf(%s: get %d \n, time.Now().Format(2006-01-02 15:04:05), x)}}()wg.Wait() } 2024-04-09 22:40:43: main thread start 2024-04-09 22:40:48: get 0 2024-04-09 22:40:48: put 0 2024-04-09 22:40:49: put 1 2024-04-09 22:40:49: get 1 2024-04-09 22:40:51: put 2 2024-04-09 22:40:51: get 2 2024-04-09 22:40:54: put 3 2024-04-09 22:40:54: get 3 2024-04-09 22:40:58: put 4 2024-04-09 22:40:58: get 4 2024-04-09 22:41:03: break 我这块还把写入和获取的时间打印出来了可以看到针对同一个元素往通道写入和从通道取出是同时完成的get 和 put 对应的时间相同这也是无缓冲通道为什么叫做同步通道的原因。 我在两个协程之间还特地 sleep 了几秒因为有时间差如果不同步的话必然 put 操作早于 get 操作但是从打印结果看出put 写操作并没有先于 get 执行而是同步执行。 容量为1的缓冲通道 对于容量为1的缓冲通道只要从通道取值的时候通道里有值就是可以正常执行的。 package mainimport fmtfunc main() {s1 : make(chan int, 1)s1 - 1fmt.Println(-s1) // 1 }我们可以尝试把上面例子中的无缓冲通道修改成容量为1的缓冲通道再运行试试只是将 naturals : make(chan int) 修改为 naturals : make(chan int, 1)。 package mainimport (fmtsynctime )const Interval 5func main() {fmt.Printf(%s: main thread start\n, time.Now().Format(2006-01-02 15:04:05))naturals : make(chan int, 1)var wg sync.WaitGroup// putwg.Add(1)go func() {defer wg.Done()for x : 0; x Interval; x {naturals - xfmt.Printf(%s: put %d \n, time.Now().Format(2006-01-02 15:04:05), x)time.Sleep(time.Duration(x1) * time.Second)}close(naturals)}()time.Sleep(Interval * time.Second) // wait sometime for writing// getwg.Add(1)go func() {defer wg.Done()for {x, ok : -naturalsif !ok {fmt.Printf(%s: break, time.Now().Format(2006-01-02 15:04:05))break // 通道关闭且读完}fmt.Printf(%s: get %d \n, time.Now().Format(2006-01-02 15:04:05), x)}}()wg.Wait() } 从打印结果可以看出这里和无缓冲通道不同的地方在于有缓冲的通道并不强制 channel 的读写者必须同时完成发送和接收读操作只会在没有数据时阻塞写操作只会在没有可用容量时阻塞这就有点像阻塞队列了。  因此本例中对于容量为1的缓冲通道第一个数据写入后才开始阻塞然后等待读操作读取因为读操作在 sleep 几秒之后才开始读取操作通道已满写操作暂时阻塞待读操作读取数据后写操作再继续执行 2024-04-09 22:44:15: main thread start 2024-04-09 22:44:15: put 0 2024-04-09 22:44:20: get 0 2024-04-09 22:44:20: get 1 2024-04-09 22:44:20: put 1 2024-04-09 22:44:22: put 2 2024-04-09 22:44:22: get 2 2024-04-09 22:44:25: put 3 2024-04-09 22:44:25: get 3 2024-04-09 22:44:29: put 4 2024-04-09 22:44:29: get 4 2024-04-09 22:44:34: break
http://www.pierceye.com/news/878157/

相关文章:

  • 学做川菜最好的网站商标综合查询
  • 网站开发培训 价格哪些网站可以找到兼职做报表的
  • 网站建设功能分为几种北京自考网址
  • 购买网站域名怎么做会计分录广告机免费投放
  • 网上做网站赚钱深圳市无限空间工业设计有限公司
  • 商贸网站建设怎么查看wordpress版本
  • 电子商务网站建设哪本教材比较适合中等专业学校用网站建设yankt
  • 局域网网站建设需要什么条件企业建网站的目的
  • 高校专业建设网站桂林漓江竹筏
  • 自已做个网站怎么做网站网络的可用性
  • 深圳网站设计建设永州做网站
  • 怎么制作网站应用wordpress 淘宝客赚钱
  • 网站在政务新媒体建设方案打开手机网站速度慢
  • 网站备案表服务类网站模板
  • 个人网站维护费用淮安注册公司
  • 网站提交做海鱼的网站
  • 建设网站业务竞争大唯一做魅惑的网站
  • 建设学校网站的意义更换wordpress图标
  • 环保局网站如何做备案证明在线代理服务器网页版
  • 十佳网站武昌做网站哪家好
  • wordpress调用同分类最新文章seo营销网站的设计标准
  • 免费下载网站有哪些连云港网络公司排名
  • 如何迅速建企业网站毕设做网站需要什么技术准备
  • 可以做音基题的音乐网站公司网页设计怎么弄
  • 益阳营销型网站建设乌鲁木做兼职的网站
  • 如何建单位网站怎么让别人找你做网站
  • 青海建设厅职称网站建设小程序怎么挂失
  • 建设在线购物网站51zwd一起做网站广州
  • 如何制作网站图片帮忙做网站
  • 高端做网站公司网络信息安全公司